STL vector
vertor : 可变大小的数组 可随机访问,尾部插入快,其它位置慢(涉及到拷贝和复制)
Myfirst Mylast Myend
大小: size = Mylast - Myfirst 已有元素个数
容量: capacity = Myend - Myfirst 最多可存元素个数
capacity >= size
resize() 设置大小(size 小->大 ok 大->小 没用) , reserve 设置容量(capacity)
resize()的作用是改变vector中元素的数目。
resize() 和reserve()都不会使capacity变小,单都有可能使capacity变大,具体怎么变大,reserve()和resize()是不一样的。
reserve()能准确的控制capacity,而resize()不能,vc里每次增大一半当前的capacity。
注意:改变capacity、插入、删除都会引起迭代器的失效。
vector 的成员函数
vec.push_back(elem) 向尾部添加一个elem数据
vec.pop_back() 删除末尾的数据
vec.begin() 返回指向第一个数据的迭代器。
vec.end() 返回指向最后一个数据之后的迭代器(尾后)。
vec.rbegin() 返回逆向队列的第一个数据,即vec容器的最后一个数据。
vec.rend() 返回逆向队列的最后一个数据的下一个位置,即vec容器的第一个数据再往前的一个位置。
vec.assign(begin, end) 将一个左闭右开的区间的数据赋值给vec
vector<int> v1,v2; v1.push_back(10); v1.push_back(20); v2.push_back(30); v2.assign(v1.begin(),v1.end());
vec.assign(n, elem) 赋n个值为elem的元素到vector容器中,这个容器会清除掉vector容器中以前的内容。
vector<int> v; v.assign(5,10);//往v里放5个10
vec.at(int index)传回索引为index的数据,如果index越界,抛出out_of_range异常。
vecto<int> v; cout << v.at(2) << endl;//打印vector中下标是2的数据
vec.clear() 移除容器中所以的数据
vec.erase(pos)删除pos位置的数据,传回下一数据的位置
vec.erase(begin, end)删除[beign, end)之间的数据,传回下一个数据的位置
vec.insert(pos,elem) 在pos位置插入一个elem的拷贝,返回插入的值的迭代器。
vec.insert(pos,n,elem)在pos位置插入n个elem的数据,无返回值。
vec.insert(pos,beg,end)在pos位置插入在[beg,end)区间的数据,无返回值。
c1.swap(c2)将c1和c2交换。
swap(c1,c2)同上。
vector<int> v1,v2,v3; v1.push_back(10); v2.swap(v1); swap(v3,v1);
vec.front()返回第一个数据。
vec.back()传回最后一个数据,不检查这个数据是否存在。
推荐阅读
-
C++的STL释放内存
-
C++的STL释放内存
-
C++学习笔记(字符串string、vector_deque、queue,multiset、map、multimap、容器拷贝问题)(复制粘贴,方便后面翻阅)
-
stl中的map、set、multimap、multiset,兼谈OceanBase造*
-
Cocos2d-x3.0中容器介绍(cocos2d::Vector)http://www.tairan.c
-
VS2017 error C2143: 语法错误: 缺少“;”(在“ ”的前面);error C4430: 缺少类型说明符,假定为 int;“vector”: 不明确的符号;
-
stl 全排列
-
Cocos2dx 3.0 过渡篇(三十一)ValueVector和Vector不得不说的故事
-
std::vector
-
Matlab tricks--array response vector