STL容器之vector基本操作

目录

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 v;
	vector v1(10, 5);
	vector v2(v1);
	vector v3(v2.begin(), v2.end());
}

截图如下:

 

STL容器之vector基本操作_第1张图片

STL容器之vector基本操作_第2张图片

STL容器之vector基本操作_第3张图片

 vector的遍历操作

1.重载[ ]进行遍历。

代码如下:

vector v3(v2.begin(), v2.end());
	//重载[]进行遍历
	for (size_t i = 0; i < v3.size(); i++)
	{
		cout << v3[i] << " ";
	}

截图如下:

2.使用迭代器进行遍历。

代码如下:

//使用迭代器进行遍历
	vector::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 v1(10, 3);
cout << v1.size() << " ";

截图如下:
 

2.capacity:获取能存储的元素的个数。

代码如下:

vector v1(10, 3);
cout << v1.capacity() << " ";

截图如下:

3.empty:判断是否为空。

代码如下:

vector v1(10, 3);
cout << v1.empty() << " ";

截图如下:

4.resize:改变size和capacity。

代码如下:

vector v(10, 3);
v.resize(20);

截图如下: 

resize之后的空间如果大于原来的空间,则进行扩容。

STL容器之vector基本操作_第4张图片

扩容之后:

 STL容器之vector基本操作_第5张图片

resize会对扩容的空间进行初始化。 

如果resize之后的空间小于原来的空间,不会进行缩容,但是会删掉原来的元素。

代码如下:

vector v(10, 3);
v.resize(5);

截图如下:

STL容器之vector基本操作_第6张图片

我们发现知识size的大小变化,容量capacity并没有发生变化。

5.reserve:改变capacity。

如果reserve之后的空间大小大于原来的空间大小。则进行扩容。

代码如下:

vector v2(5, 3);
v2.reserve(10);

截图如下:
STL容器之vector基本操作_第7张图片

STL容器之vector基本操作_第8张图片

size不会改变,只是改变了容量capacity。

如果reserve之后的空间小于之前的空间,不会发生任何变化,capacity和size都不会发生变化。

代码如下:

vector v3(5, 3);
v3.reserve(2);

截图如下:

STL容器之vector基本操作_第9张图片

STL容器之vector基本操作_第10张图片

可见,reserve只能用于扩容。resize也用于扩容,也可以删除容器中的元素。

vector增删查改

1.push_back:尾插。

 代码如下:

vector v3(5, 3);
v3.push_back(4);

截图如下:

STL容器之vector基本操作_第11张图片

STL容器之vector基本操作_第12张图片

2.pop_back:尾删。

代码如下:

vector v3(5, 3);
v3.push_back(4);
v3.pop_back();

截图如下:

STL容器之vector基本操作_第13张图片         

 3.find:查找,这个函数不是vector类中的成员函数,而是算法模块中的函数。

如果查找到了返回的是当前位置的迭代器,如果没有查找到,返回的是最后一个元素位置的下一个位置的迭代器。

代码如下:

	vector v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	vector::iterator it = find(v3.begin(),v3.end(),5);
	if (it != v3.end())
	{
		cout << "找到了!" << endl;
	}

 截图如下:

 4.insert,在某一位置插入元素。

 代码如下:

    vector v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	vector::iterator it = find(v3.begin(),v3.end(),5);
	if (it != v3.end())
	{
		cout << "找到了!" << endl;
		v3.insert(it, 6);
	}

截图如下:

STL容器之vector基本操作_第14张图片

STL容器之vector基本操作_第15张图片

注意:insert函数的使用如过要往某一位置插入元素,应该传这个位置的迭代器。

5.erase,删除某一位置的元素或者删除全部的元素。

注意,也应该传当前位置的迭代器或者整个容器的迭代器区间。

删除某一位置元素: 

代码如下:

    vector v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	vector::iterator it = find(v3.begin(),v3.end(),5);
	v3.erase(it);

截图如下: 

STL容器之vector基本操作_第16张图片

STL容器之vector基本操作_第17张图片

删除全部元素:

代码如下:

	vector 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 v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	vector::iterator it = find(v3.begin(),v3.end(),5);
	v3.erase(it);
	v3.clear();

截图如下:

以上便是vector的重点基本操作,与string的函数是类似的,一通则百通。

本期内容到此结束^_^

你可能感兴趣的:(知识总结,C++,c++,开发语言)