5.vector容器的使用

文章目录

    • vector容器
      • 1.构造函数
        • 代码工程
        • 运行结果
      • 2.赋值
        • 代码工程
        • 运行结果
      • 3.容量和大小
        • 代码工程
        • 运行结果
      • 4.插入和删除
        • 代码工程
        • 运行结果
      • 5.数据存取
        • 工程代码
        • 运行结果
      • 6.互换容器
        • 代码工程
        • 运行结果
      • 7.预留空间
        • 代码工程
        • 运行结果

vector容器

1.构造函数

/*1.默认构造-无参构造*/
/*2.通过区间的方式进行构造*/
/*3.n个elem方式构造*/
/*4.拷贝构造*/
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>

using namespace std;

void printVector(const vector<int>&v)
{
	for (vector<int>::const_iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}


void test01()
{
	/*1.默认构造-无参构造*/
	vector<int>v1;

	/*尾插*/
	for (int i = 0; i < 5 ; i++)
	{
		v1.push_back(i);
	}

	cout << "v1容器的数据: ";
	/*打印*/
	printVector(v1);

	/*2.通过区间的方式进行构造*/
	vector<int>v2(v1.begin(), v1.end());

	cout << "v2容器的数据: ";
	/*打印*/
	printVector(v2);

	/*3.n个elem方式构造*/
	vector<int>v3(5, 100);

	cout << "v3容器的数据: ";
	/*打印*/
	printVector(v3);

	/*4.拷贝构造*/
	vector<int>v4(v3);

	cout << "v4容器的数据: ";
	/*打印*/
	printVector(v4);

	return;
}


int main()
{
	test01();


	return 0;
}
运行结果

在这里插入图片描述

2.赋值

/* 1.赋值  operator= */
/* 2.赋值  assign 迭代器区间*/
/* 3.赋值  assign n个elem的方式*/
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>

using namespace std;


void printVector(const vector<int>&v)
{
	for (vector<int>::const_iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;

	return;
}

void test()
{
	vector<int>v1;

	/*尾插*/
	for (int i = 0; i < 5; i++)
	{
		v1.push_back(i);
	}
	cout << "v1容器的数据: ";

	printVector(v1);

	/* 1.赋值  operator= */
	vector<int>v2;
	v2 = v1;

	cout << "v2容器的数据: ";

	printVector(v2);

	/* 2.赋值  assign 迭代器区间*/
	vector<int>v3;
	v3.assign(v2.begin(), v2.end());/*注意是:闭开区间*/

	cout << "v3容器的数据: ";

	printVector(v3);

	/* 3.赋值  assign n个elem的方式*/
	vector<int>v4;
	v4.assign(5, 200);

	cout << "v4容器的数据: ";

	printVector(v4);

	return;
}


int main()
{
	test();

	return 0;
}
运行结果

在这里插入图片描述

3.容量和大小

/*1.empty() 如果为不空,返回值是0*/
/*2.capacity() 查询容量*/
/*3.size() 查询容器中的数据个数*/
/*4.resize() 重新指定大小*/
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>

using namespace std;

void printVector(const vector<int>&v)
{
	for (vector<int>::const_iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;

	return;
}

void test()
{
	vector<int>v1;

	/*尾插*/
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);
	}
	cout << "v1容器的数据: ";

	printVector(v1);

	/*1.empty() 如果为不空,返回值是0*/
	if (v1.empty())
	{
		cout << "v1容器为空" << endl;
		return ;
	}

	/*2.capacity() 查询容量*/
	cout << "v1的容量为:" << v1.capacity() << endl;

	/*3.size() 查询容器中的数据个数*/
	cout << "v1的大小为:" << v1.size() << endl;

	/*4.resize() 重新指定大小*/
	
	cout << "v1重新指定长度为15时 :";
	v1.resize(15);/*如果重新指定的比原来长了,默认用0填充新的位置*/
	//v1.resize(15, 100);/*利用重载版本,可以指定默认值的填充*/

	printVector(v1);

	cout << "v1重新指定长度为5时 :";
	v1.resize(5);/*如果重新指定的比原来短了,超出的部分会删除掉*/

	printVector(v1);

	return;
}


int main()
{
	test();

	return 0;
}
运行结果

在这里插入图片描述

4.插入和删除

/*1.尾删*/
/*2.插入 - 迭代器输入*/
/*3.删除 - 迭代器输入*/
/*4.清空*/
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>

using namespace std;

/*1.尾删*/
/*2.插入 - 迭代器输入*/
/*3.删除 - 迭代器输入*/
/*4.清空*/
void printVector(const vector<int>&v)
{
	for (vector<int>::const_iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test()
{
	vector<int>v1;
	/*尾插*/
	v1.push_back(10);
	v1.push_back(20);
	v1.push_back(30);
	v1.push_back(40);
	v1.push_back(50);

	cout << "v1容器的数据: ";

	printVector(v1);

	/*1.尾删*/
	v1.pop_back();

	cout << "尾删后v1容器中的数据: ";

	printVector(v1);

	/*2.插入- 迭代器输入*/
	v1.insert(v1.begin(), 1000);

	cout << "插入后v1容器中的数据: ";

	printVector(v1);

	/*利用重载的版本,可以插入多个重复的数据*/

	v1.insert(v1.begin(), 2, 2000);

	cout << "插入后v1容器中的数据: ";

	printVector(v1);

	/*3.删除 - 迭代器输入*/
	v1.erase(v1.begin());

	cout << "删除后v1容器中的数据: ";

	printVector(v1);

	/*删除 - 区间删除*/
	v1.erase(v1.begin(), v1.end());

	if (v1.empty())/*v1为空,empty()返回值为1*/
	{
		cout << "当前容器为空!" << endl;
	}

	/*尾插*/
	v1.push_back(10);
	v1.push_back(20);

	printVector(v1);

	/*4.清空*/
	v1.clear();

	cout << "清空v1容器中的数据: ";

	if (v1.empty())/*v1为空,empty()返回值为1*/
	{
		cout << "当前容器为空!" << endl;
	}

	return;
}

int main()
{
	test();

	return 0;
}
运行结果

在这里插入图片描述

5.数据存取

/*1.利用[]方式访问数组中的元素*/
/*2.利用at方式访问数组中的元素*/
/*3.获取第一个元素*/
/*4.获取第最后一个元素*/
工程代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>

using namespace std;

/*1.利用[]方式访问数组中的元素*/
/*2.利用at方式访问数组中的元素*/
/*3.获取第一个元素*/
/*4.获取第最后一个元素*/

void test()
{
	vector<int>v1;
	/*尾插*/
	v1.push_back(10);
	v1.push_back(20);
	v1.push_back(30);
	v1.push_back(40);
	v1.push_back(50);

	cout << "利用[]访问v1容器的数据: ";

	/*1.利用[]方式访问数组中的元素*/
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}
	cout << endl;

	cout << "利用at访问v1容器的数据: ";

	/*2.利用at方式访问数组中的元素*/
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1.at(i) << " ";
	}
	cout << endl;

	cout << "访问v1容器的第一个数据: ";

	/*3.获取第一个元素*/
	cout << v1.front() << endl;

	cout << "访问v1容器的最后一个数据: ";

	/*4.获取第最后一个元素*/
	cout << v1.back() << endl;

	return;
}

int main()
{
	test();

	return 0;
}
运行结果

在这里插入图片描述

6.互换容器

代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>

using namespace std;

void printVector(const vector<int>&v)
{
	for (vector<int>::const_iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test()
{
	vector<int>v1;
	/*尾插*/
	v1.push_back(10);
	v1.push_back(20);
	v1.push_back(30);
	v1.push_back(40);
	v1.push_back(50);

	cout << "v1容器的数据: ";

	printVector(v1);

	vector<int>v2;
	/*尾插*/
	v2.push_back(100);
	v2.push_back(200);
	v2.push_back(300);
	v2.push_back(400);
	v2.push_back(500);

	cout << "v2容器的数据: ";

	printVector(v2);

	cout << "-----------交换容器的数据后-----------" << endl;

	/*交换两个容器中的数据*/
	v1.swap(v2);

	cout << "v1容器的数据: ";

	printVector(v1);

	cout << "v2容器的数据: ";

	printVector(v2);

	return;
}

void test01()
{
	/*交换容器的实际作用:利用swap可以收缩内存空间*/
	vector<int>v;
	for (int i = 0; i < 100000; i++)
	{
		v.push_back(i);
	}

	cout << "v容器的容量:" << v.capacity() << endl;
	cout << "v容器的大小:" << v.size() << endl;

	/*重新指定大小*/
	v.resize(5);
	cout << "重新指定v容器的大小: " << endl;

	cout << "v容器的容量:" << v.capacity() << endl;
	cout << "v容器的大小:" << v.size() << endl;


	cout << "收缩v容器的大小: " << endl;
	/*利用swap收缩内存空间*/
	vector<int>(v).swap(v);
	cout << "v容器的容量:" << v.capacity() << endl;
	cout << "v容器的大小:" << v.size() << endl;



	return;
}
int main()
{
	test();

	cout << endl;
	cout << "swap的实际作用" << endl;

	test01();

	return 0;
}
运行结果

在这里插入图片描述

7.预留空间

代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>

using namespace std;

void printVector(const vector<int>& v)
{
	for (vector<int>::const_iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test()
{
	vector<int>v1;
	int* p = NULL;
	int num = 0;
	/*计算出尾插十万次,容器重新开辟空间的次数*/
	for (int i = 0; i < 100000; i++)
	{
		v1.push_back(i);
		if (p != &v1[0])
		{
			num++;
			p = &v1[0];
		}
	}

	cout << "v1容器重新开辟空间的次数:" << num << endl;

	return;
}

void test01()
{
	vector<int>v1;
	int* p = NULL;
	int num = 0;

	/*预留空间 - reserve*/
	v1.reserve(100000);

	p = NULL;
	for (int i = 0; i < 100000; i++)
	{
		v1.push_back(i);
		if (p != &v1[0])
		{
			num++;
			p = &v1[0];
		}
	}

	cout << "预留空间后v1容器重新开辟空间的次数:" << num << endl;

	return;
}

int main()
{
	test();

	cout << endl;

	test01();

	return 0;
}
运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/506206.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32 can通信部分函数注释

相关截图: CAN模式初始化函数:u8 CAN1_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode) //CAN初始化 //tsjw:重新同步跳跃时间单元.范围:CAN_SJW_1tq~ CAN_SJW_4tq //tbs2:时间段2的时间单元. 范围:CAN_BS2_1tq~CAN_BS2_8tq; //tbs1:时间段1的时间单元. 范围:CAN_BS…

IO流c++

IO流类库 输入输出流 #include <iostream> using namespace std;class InCount { public:InCount(int a 0, int b 0){c1 a;c2 b;}void show(void){cout << "c1" << c1 << "\t" << "c2" << c2 << …

PHP三种方式读取RSA密钥加解密、签名验签完整教程

目录 第一步、生成公私钥 第二步、三种方式读取RSA密钥 第1种&#xff1a;公私钥弄成一行&#xff0c;必须一行没有空格和换行 第2种&#xff1a;直接复制生成公私钥 第3种;复制密钥存储为.pem文件后缀 第三步、RSA加解密 第四步、RSA签名以及验证签名 第五步、封装完整…

Linux的开发工具(二):编译器gcc/g++与Linux项目自动化构建工具-Makefile

Linux的编译器-gcc/g 基本概念&#xff1a;gcc是专门用来编译c语言的&#xff0c;g可以编译c或c语言 问题一&#xff1a;gcc有时候为什么不能编译带有for循环的c语言源文件&#xff1f; 答&#xff1a;gcc版本过低会不支持for循环等c99标准下的内容 解决方式&#xff1a;gcc…

手搓 Docker Image Creator(DIC)工具(02):预备知识

此节主要简单介绍一下 Docker、Dockerfile 的基本概念&#xff0c;Dockerfile 对的基本语法&#xff0c;Windows 和 macOS 下 Docker 桌面的安装&#xff0c;Docker 镜像的创建和运行测试等。 1 关于 Docker Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者打包应用…

Open3D(C++) 基于随机抽样与特征值法的点云平面稳健拟合方法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的GPT爬虫。 一、算法原理 1、论文概述 针对点云数据含有异常值且传统拟合方法拟合结果不理想的情…

《自动机理论、语言和计算导论》阅读笔记:p115-p138

《自动机理论、语言和计算导论》学习第 6 天&#xff0c;p115-p138 总结&#xff0c;总计 24 页。 一、技术总结 1.associativity and comutativity (1)commutativity(交换性): Commutativity is the property of an operator that says we can switch the order of its ope…

Acwing-3418 杨辉三角形

关于杨辉三角形的一些规律&#xff08;更详细地去看参考&#xff09;&#xff1a; 下面这些图都来自其他人所做图片 因为杨辉三角形是对称的&#xff0c;并且与二项式有关&#xff1a; 将左半部分(左半部分的编号肯定比右半部分小&#xff0c;不考虑右半部分&#xff09;一个斜…

如何区分相对路径 与 绝对路径?

在网页中有很多需要使用我们URL路径的场景&#xff0c;包括a标签的href、link标签的href、script标签的src、imag标签的src、form中的action、ajax请求的url等等等等。它们都可以使用相对路径和绝对路径来引入文件&#xff0c;那么&#xff0c;我们如何区分相对路径与绝对路径呢…

MATLAB | 绘图复刻(十六) | 弦图2.1.0版本更新——弦末端弧形块颜色单独设置

Hey, 本人自主开发的弦图绘制工具迎来2.1.0版本了&#xff1a;起因是有粉丝问我前两天发布的文章中这张图咋画&#xff1a; 我本来一想我开发的工具画弦图还是很简单的哇&#xff08;下面文章中有基本用法&#xff09; https://slandarer.blog.csdn.net/article/details/126458…

Vue tree自定义滚动条位置

贴一张效果图&#xff0c;我的效果不方便贴出来 实现支持&#xff1a; 1、懒加载 2、普通加载 下面贴关键思想&#xff1a; document有一个获取element元素的方法。 let element document.getElementById(tree); let arr document.querySelectorAll(".nodelModel&quo…

编曲知识15:重复段落编写 尾奏编写 家庭工作室搭建 硬件设备使用常识

15 重复段落编写 尾奏编写 家庭工作室搭建 硬件设备使用常识小鹅通-专注内容付费的技术服务商https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_6602a586e4b0694cc051476b?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 重复段落设计 第二段落指代间奏过后的段落 第二…

uniapp 小程序发布体验版 http://198.18.0.1:7001 不在以下 request 合法域名列表中(踩坑记录二)

问题一&#xff1a; 小程序发布体验版时出现报错信息&#xff1a; http://198.18.0.1:7001 不在以下 request 合法域名列表中无法连接uniCloud本地调试服务&#xff0c;请检查当前客户端是否与主机在同一局域网下 解决方案&#xff1a; 请务必在HBuilderX内使用【发行】菜单打…

上位机图像处理和嵌入式模块部署(qmacvisual寻找圆和寻找直线)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面有几篇文章&#xff0c;我们谈到过直线拟合、圆拟合和椭圆拟合。当时&#xff0c;我们的做法是&#xff0c;先找到了轮廓&#xff0c;接着找到…

C++多线程:单例模式与共享数据安全(七)

1、单例设计模式 单例设计模式&#xff0c;使用的频率比较高&#xff0c;整个项目中某个特殊的类对象只能创建一个 并且该类只对外暴露一个public方法用来获得这个对象。 单例设计模式又分懒汉式和饿汉式&#xff0c;同时对于懒汉式在多线程并发的情况下存在线程安全问题 饿汉…

稀碎从零算法笔记Day35-LeetCode:字典序的第K小数字

要考虑完结《稀碎从零》系列了哈哈哈 这道题和【LC.42 接雨水】&#xff0c;我愿称之为【笔试界的颜良&文丑】 题型&#xff1a;字典树、前缀获取、数组、树的先序遍历 链接&#xff1a;440. 字典序的第K小数字 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1…

el-upload上传图片图片、el-load默认图片重新上传、el-upload初始化图片、el-upload编辑时回显图片

问题 我用el-upload上传图片&#xff0c;再上一篇文章已经解决了&#xff0c;el-upload上传图片给SpringBoot后端,但是又发现了新的问题&#xff0c;果然bug是一个个的冒出来的。新的问题是el-upload编辑时回显图片的保存。 问题描述&#xff1a;回显图片需要将默认的 file-lis…

从0配置React

在本地安装和配置React项目&#xff0c;您可以使用create-react-app这个官方推荐的脚手架工具。以下是安装React的步骤&#xff0c;包括安装Node.js、使用create-react-app创建React应用&#xff0c;以及启动开发服务器。 下载安装node.js运行以下命令&#xff0c;验证Node.js…

施耐德 Unity Pro PLC 编程软件介绍

Unity Pro 软件基本介绍 Unity Pro 是施耐德中大型 PLC 的编程软件&#xff08;<–> 对应西门子 Step7&#xff09; 支持的 PLC&#xff1a;施耐德中大型 PLC 中型 PLC&#xff1a;Premium、M340&#xff08;<–> 对应西门子 S7-300、S7-1200&#xff09;大型 PL…

精读 Generating Mammography Reports from Multi-view Mammograms with BERT

精读&#xff08;非常推荐&#xff09; Generating Mammography Reports from Multi-view Mammograms with BERT&#xff08;上&#xff09; 这里的作者有个叫 Ilya 的吓坏我了 1. Abstract Writing mammography reports can be errorprone and time-consuming for radiolog…