vector
vector是表示可变大小数组的序列容器,像数组一样采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。
常用构造函数
vector()
:无参构造vector(size_type n, const value_type& val = value_type())
:构造并初始化n个valvector (const vector& x);
:拷贝构造vector (InputIterator first, InputIterator last);
:使用迭代器进行初始化构造
int main()
{
vector<int> v1;//创空的的整形向量
vector<int> v2(4, 100);//
std::vector<int> v3(v2.begin(), v2.end()); //通过迭代器构造
std::vector<int> v4(v3); //拷贝v3
}
assign()
将值赋给容器
int main()
{
std::vector<char> characters;
characters.assign(5, 'a');//a a a a a
characters.assign({'\n', 'C', '+', '+', '1', '1', '\n'});//C++11
}
容量
size ()
:返回容纳的元素数capacity()
:获取容量大小
*[empty()
:检查容器是否为空resize()
:改变vector的sizereserve( size_type new_cap );
:预留存储空间
[注]capacity的代码在vs和g++下分别运行会发现,vs下capacity是按1.5倍增长的,g++是按2倍增长的。
元素访问
at()
:访问指定的元素,同时进行越界检查operator[]
:访问指定的元素front()
:访问第一个元素back()
:访问最后一个元素
vector 增删查改
push_back()
:尾插pop_back ()
:尾删insert():
在position之前插入valerase()
:删除position位置的数据swap()
:交换两个vector的数据空间
迭代器
begin()
获取第一个数据位置的iterator/const_iteratorend()
获取最后一个数据的下一个位的iterator/const_iteratorrbegin()
获取最后一个数据位置的reverse_iterator,rend()
获取第一个数据前一个位置的reverse_iterator
vector 迭代器失效问题
- 会引起其底层空间改变的操作,都有可能是迭代器失效,比如:resize、reserve、insert、assign、push_back等。
- 指定位置元素的删除操作–erase。
- 迭代器失效解决办法:在使用前,对迭代器重新赋值即可。