目录
?3.find:查找,这个函数不是vector类中的成员函数,而是算法模块中的函数。
6.clear,清除所有的元素,与erase删除所有的元素功能类似。
在前几期我们学习了STL容器中的string类,string类其实可以理解为是一个数组,但是数组的每个元素只能存放字符。从本期开始,我们将学习C++中的下一个容器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<int> v3(v2.begin(), v2.end());
//重载[]进行遍历
for (size_t i = 0; i < v3.size(); i++)
{
cout << v3[i] << " ";
}
截图如下:
代码如下:
//使用迭代器进行遍历
vector<int>::iterator it = v3.begin();
while (it != v3.end())
{
cout << *it << " ";
it++;
}
截图如下:
注意:反向迭代器的使用和string类的反向迭代器使用方法类似,迭代器++即可。?
代码如下:
//范围for循环,本质其实就是迭代器进行遍历
for (auto e : v3)
{
cout << e << " ";
}
截图如下:
代码如下:
//使用at成员函数进行遍历
for (int i = 0; i < v3.size(); i++)
{
cout << v3.at(i) << " ";
}
截图如下:?
代码如下:
vector<int> v1(10, 3);
cout << v1.size() << " ";
截图如下:
?
代码如下:
vector<int> v1(10, 3);
cout << v1.capacity() << " ";
截图如下:
代码如下:
vector<int> v1(10, 3);
cout << v1.empty() << " ";
截图如下:
代码如下:
vector<int> v(10, 3);
v.resize(20);
截图如下:?
resize之后的空间如果大于原来的空间,则进行扩容。
扩容之后:
?
resize会对扩容的空间进行初始化。?
如果resize之后的空间小于原来的空间,不会进行缩容,但是会删掉原来的元素。
代码如下:
vector<int> v(10, 3);
v.resize(5);
截图如下:
我们发现知识size的大小变化,容量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<int> v3(5, 3);
v3.push_back(4);
截图如下:
代码如下:
vector<int> v3(5, 3);
v3.push_back(4);
v3.pop_back();
截图如下:
? ? ? ???
如果查找到了返回的是当前位置的迭代器,如果没有查找到,返回的是最后一个元素位置的下一个位置的迭代器。
代码如下:
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;
}
?截图如下:
?代码如下:
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函数的使用如过要往某一位置插入元素,应该传这个位置的迭代器。
注意,也应该传当前位置的迭代器或者整个容器的迭代器区间。
删除某一位置元素:?
代码如下:
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());
截图如下:
?
代码如下:
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的函数是类似的,一通则百通。
本期内容到此结束^_^