vector的介绍与使用
1.vector的介绍
vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素
进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自
动处理。
详细可参考:vector详细介绍
2.vector的使用
2.1.vector的定义
构造函数声明 | 接口说明 |
---|---|
vector() | 无参构造 |
vector(size_type n, const value_type& val = value_type()) | 构造并初始化n个val |
vector (const vector& x) | 拷贝构造 |
vector (InputIterator first, InputIterator last) | 使用迭代器进行初始化构造 |
代码演示:
vector<int> A;
vector<int> B(4, 100); //4个值为100的整数
vector<int> C(B.begin(), B.end());//遍历一边B
vector<int> D(C);//拷贝一份C
2.2.vector iterator的使用
iterator的使用 | 接口说明 |
---|---|
begin()和end() | 获取第一个数据位置的iterator/const_iterator, 获取最后一个数据的下一个位置的iterator/const_iterator |
rebegin()和rend() | 获取最后一个数据位置的reverse_iterator,获取第一个数据前一个位置的reverse_iterator |
具体位置指示:
vector<int> v(4,100);
vector<int>::const_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;
2.3.vector空间增长问题
容量空间 | 接口说明 |
---|---|
size | 获取数据个数 |
capacity | 获取容量大小 |
empty | 判断是否为空 |
resize | 改变vector的size |
reserve | 改变vector的capacity |
size_t sz;
vector<int> v;
sz = v.capacity();
cout << "making v grow:\n";
for (int i = 0; i < 100; ++i)
{
v.push_back(i);
if (sz != v.capacity())
{
sz = v.capacity();
cout << "改变大小: " << sz << '\n';
}
}
结果图:
可以发现在vs基本是按照1.5倍方式扩容
2.3.vector的增删查改
接口 | 接口说明 |
---|---|
pushback | 尾插 |
popback | 尾删 |
find | 查找(注意find不是vector自身提供的方法,是STL提供的算法) |
insert | 在position之前插入值 |
erase | 删除position位置的数据 |
swap | 交换两个vector的数据空间 |
operator[] | 类似数组一样访问vector成员 |
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
auto it = v.begin();
while (it != v.end())
{
cout << *it << " ";
++it;
}
cout << endl;
v.pop_back();
v.pop_back();
it = v.begin();
while (it != v.end())
{
cout << *it << " ";
++it;
}
cout << endl;
auto pos = find(v.begin(),v.end(),2);
cout << "2的位置是第" << *pos << "个" << endl;
v.insert(pos, 20);//在这个位置之前插入20
cout << "插入后:";
it = v.begin();
while (it != v.end())
{
cout << *it << " ";
++it;
}
学习记录若有缺陷还请大佬指出。