STL容器之vector基本操作

2024-01-08 15:01:44

目录

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的函数是类似的,一通则百通。

本期内容到此结束^_^

文章来源:https://blog.csdn.net/qq_55958734/article/details/135441485
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。