目录
一、什么是vector:
1、vector就是标准模板库中的一种数据结构,表示一种可变大小的数组,所以vector就像数组一样,vector对其元素使用连续的存储位置,也就可以指向其元素的指针上的偏移量来访问其元素。
2、使用vector的时候记得包含头文件include<vector>,vector是动态地增缩其大小的,也支持任意访问,插入,删除。
二、如何使用vector:
在包含include<vector>文件的项目下,首先创建对象,再通过vector的接口来进行使用,学习时候一定要记得多查文档。
1、vector的构造:
如上就是各个构造的应用
2、迭代器:
int main()
{
// 使用push_back插入4个数据
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
// 使用迭代器进行打印
vector<int>::iterator it = v.begin();
while (it != v.end())
{
cout << *it << " ";
++it;
}
cout << endl;
// 使用反向迭代器进行打印
vector<int>::reverse_iterator rit = v.rbegin();
while (rit != v.rend())
{
cout << *rit << " ";
++rit;
}
cout << endl;
//也可以通过for循环打印,默认为正向的
for (auto e : v)
{
cout << e << " ";
}
return 0;
}
如上就是正反向迭代器的遍历打印,其中注意,begin()是第一个元素的位置,end()是最后一个元素的下一个位置。rbegin()是最后一个数据的位置,rend()是第一个数据的前一个位置。
3、vector的空间增长:
在如上的几个中,resize和reserve是最重要的两个,reserve只负责开辟空间,如果确定知道需要用多少空间,可以通过reserve提前将空间设置成足够,就可以缓解vector增容的代价缺陷问题,而resize在开空间的同时还会进行初始化,影响size。
其中:在vs中capacity是1.5倍增长的g++中是2倍增长的,所以具体增长是根据不同编译器进行的,不要太死板地认为其是2倍或1.5倍增长的。
如上所示,在库函数中,reserve就是只有一个参数,给多少就开辟多少大小的空间,
resize有两个,前一个是开辟多少大小的空间,后一个是初始化为多少。
int main()
{
vector<int> v1;
//开辟一个1000大小的空间
v1.reserve(1000);
cout << "size:" << v1.capacity() << endl;
cout << "capacity" << v1.capacity() << endl;
vector<int> v2;
//开辟一个10个大小的空间,同时改变size,半缺省初始化为0
v2.resize(10);
for (auto e : v2)
{
cout << e << " ";
}
cout << endl;
vector<int> v3;
//将数据初始化为1
v3.resize(10, 1);
for (auto e : v3)
{
cout << e << " ";
}
cout << endl;
return 0;
}
4、vector的增删查改:
vector的增删查改主要就是通过这些成员函数进行操作的,注意其中find不是vector自身提供的方法,是STL提供的算法
int main()
{
//刚开始初始化为三个1
vector<int> v(3, 1);
//接着在后面进行尾插:
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
//find的查,返回元素的位置,auto自动匹配类型
//auto pos = find(v.begin(), v.end(), 3);
std::vector<int>::iterator pos1 = find(v.begin(), v.end(), 3);
//对上面进行删除:
cout << "删除后" << endl;
v.erase(pos1);
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
//插入:先用find找到要插入的地方之前,再进行insert
std::vector<int>::iterator pos2 = find(v.begin(), v.end(), 2);
v.insert(pos2, 100);
cout << "插入后:" << endl;
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
//[]的修改:
//将第一个数据改为100
v[0] = 100;
cout << "修改后:" << endl;
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
return 0;
}
最后,在学习的时候多查文档帮助。