目录
vector基本操作
vector构造函数
vector的遍历操作
1.重载[ ]进行遍历。
2.使用迭代器进行遍历。
3.使用范围for循环进行遍历。
4.使用at成员函数进行遍历 。
vector空间增长
1.size:获取当前元素的个数。
2.capacity:获取能存储的元素的个数。
3.empty:判断是否为空。
4.resize:改变size和capacity。
5.reserve:改变capacity。
vector增删查改
1.push_back:尾插。
2.pop_back:尾删。
3.find:查找,这个函数不是vector类中的成员函数,而是算法模块中的函数。
4.insert,在某一位置插入元素。
5.erase,删除某一位置的元素或者删除全部的元素。
6.clear,清除所有的元素,与erase删除所有的元素功能类似。
在前几期我们学习了STL容器中的string类,string类其实可以理解为是一个数组,但是数组的每个元素只能存放字符。从本期开始,我们将学习C++中的下一个容器vector,vector也可以理解是一个数组,每个元素的类型是可以自己定义的。
vector基本操作
vector构造函数
1.全缺省的构造函数:
2.可以指定元素和个数进行初始化
3.拷贝构造函数
4.使用迭代器区间进行初始化构造
代码如下:
void test1()
{
	vector<int> v;
	vector<int> v1(10, 5);
	vector<int> v2(v1);
	vector<int> v3(v2.begin(), v2.end());
} 
截图如下:
 ![]()



vector的遍历操作
1.重载[ ]进行遍历。
代码如下:
vector<int> v3(v2.begin(), v2.end());
	//重载[]进行遍历
	for (size_t i = 0; i < v3.size(); i++)
	{
		cout << v3[i] << " ";
	}
 
截图如下:

2.使用迭代器进行遍历。
代码如下:
//使用迭代器进行遍历
	vector<int>::iterator it = v3.begin();
	while (it != v3.end())
	{
		cout << *it << " ";
		it++;
	} 
截图如下:
![]()
注意:反向迭代器的使用和string类的反向迭代器使用方法类似,迭代器++即可。
3.使用范围for循环进行遍历。
代码如下:
//范围for循环,本质其实就是迭代器进行遍历
	for (auto e : v3)
	{
		cout << e << " ";
	} 
截图如下:
![]()
4.使用at成员函数进行遍历 。
代码如下:
//使用at成员函数进行遍历
	for (int i = 0; i < v3.size(); i++)
	{
		cout << v3.at(i) << " ";
	} 
截图如下:
![]()
vector空间增长
1.size:获取当前元素的个数。
代码如下:
vector<int> v1(10, 3);
cout << v1.size() << " "; 
截图如下:
  ![]()
2.capacity:获取能存储的元素的个数。
代码如下:
vector<int> v1(10, 3);
cout << v1.capacity() << " "; 
截图如下:
![]()
3.empty:判断是否为空。
代码如下:
vector<int> v1(10, 3);
cout << v1.empty() << " "; 
截图如下:
![]()
4.resize:改变size和capacity。
代码如下:
vector<int> v(10, 3);
v.resize(20); 
截图如下:
resize之后的空间如果大于原来的空间,则进行扩容。

扩容之后:
 
resize会对扩容的空间进行初始化。
如果resize之后的空间小于原来的空间,不会进行缩容,但是会删掉原来的元素。
代码如下:
vector<int> v(10, 3);
v.resize(5); 
截图如下:

我们发现知识size的大小变化,容量capacity并没有发生变化。
5.reserve:改变capacity。
如果reserve之后的空间大小大于原来的空间大小。则进行扩容。
代码如下:
vector<int> v2(5, 3);
v2.reserve(10); 
截图如下:

size不会改变,只是改变了容量capacity。
如果reserve之后的空间小于之前的空间,不会发生任何变化,capacity和size都不会发生变化。
代码如下:
vector<int> v3(5, 3);
v3.reserve(2); 
截图如下:


可见,reserve只能用于扩容。resize也用于扩容,也可以删除容器中的元素。
vector增删查改
1.push_back:尾插。
代码如下:
vector<int> v3(5, 3);
v3.push_back(4); 
截图如下:


2.pop_back:尾删。
代码如下:
vector<int> v3(5, 3);
v3.push_back(4);
v3.pop_back(); 
截图如下:
         
3.find:查找,这个函数不是vector类中的成员函数,而是算法模块中的函数。
如果查找到了返回的是当前位置的迭代器,如果没有查找到,返回的是最后一个元素位置的下一个位置的迭代器。
代码如下:
	vector<int> v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	vector<int>::iterator it = find(v3.begin(),v3.end(),5);
	if (it != v3.end())
	{
		cout << "找到了!" << endl;
	} 
截图如下:

4.insert,在某一位置插入元素。
代码如下:
    vector<int> v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	vector<int>::iterator it = find(v3.begin(),v3.end(),5);
	if (it != v3.end())
	{
		cout << "找到了!" << endl;
		v3.insert(it, 6);
	} 
截图如下:


注意:insert函数的使用如过要往某一位置插入元素,应该传这个位置的迭代器。
5.erase,删除某一位置的元素或者删除全部的元素。
注意,也应该传当前位置的迭代器或者整个容器的迭代器区间。
删除某一位置元素:
代码如下:
    vector<int> v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	vector<int>::iterator it = find(v3.begin(),v3.end(),5);
	v3.erase(it); 
截图如下:


删除全部元素:
代码如下:
	vector<int> v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	v3.erase(v3.begin(), v3.end()); 
截图如下:
 
6.clear,清除所有的元素,与erase删除所有的元素功能类似。
代码如下:
    vector<int> v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	vector<int>::iterator it = find(v3.begin(),v3.end(),5);
	v3.erase(it);
	v3.clear(); 
截图如下:

以上便是vector的重点基本操作,与string的函数是类似的,一通则百通。
本期内容到此结束^_^











![[De1ctf 2019]SSRF Me](https://img-blog.csdnimg.cn/direct/3e624bf6ccfc408e98152489309694e6.png)











