vector:
Constructors 构造函数 Operators 对vector进行赋值或比较 assign() 对Vector中的元素赋值 at() 返回指定位置的元素 back() 返回最末一个元素 begin() 返回第一个元素的迭代器 capacity() 返回vector所能容纳的元素数量(在不重新分配内存的情况下) clear() 清空所有元素 empty() 判断Vector是否为空(返回true时为空) end() 返回最末元素的迭代器(译注:实指向最末元素的下一个位置) erase() 删除指定元素 front() 返回第一个元素 get_allocator() 返回vector的内存分配器 insert() 插入元素到Vector中 max_size() 返回Vector所能容纳元素的最大数量(上限) pop_back() 移除最后一个元素 push_back() 在Vector最后添加一个元素 rbegin() 返回Vector尾部的逆迭代器 rend() 返回Vector起始的逆迭代器 reserve() 设置Vector最小的元素容纳数量 resize() 改变Vector元素数量的大小 size() 返回Vector元素数量的大小 swap() 交换两个Vector
(1)在编写与vector有关的函数时总是会出现如下警告:
-------------------------------------------------------------------- 警告信息 warning C4018: 有符号/无符号不匹配 -------------------------------------------------------------------- 仔细研究之后发现是进行了与v.size()有关的操作引起的,用其中容器中与size()是被定义为unsigned int 型,而我们在遍历时会用int型导致警告的产生,因此在int 前面添加 unsigned即可。
(2)
总是出现 vector subscript out of range
在用VC++2008Express Edition 运行插入排序程序时,如果用数组,程序运行正常,而如果改用到vector,就出现vector subscription out of range 异常。
(3)vector<pair<int,string> >是什么意思? (4)sort(Reader.begin(),Reader.end(),compare); (5)对二维vector的初始化要非常注意,很容易出错(vector out of range) (6)vector中erase用法注意事项 vector中的erase方法有些诡异(^_^),稍不注意,就会出错。今天又一次遇到了,就索性总结一下,尤其是在循环体中用erase时,由于vector.begin() 和vector.end()是变化的,因此就引入了错误的可能性。 vector<int> veci; for(vector<int>::iterator iter=veci.begin(); iter!=veci.end(); iter++) 乍一看这段代码,很正常。其实这里面隐藏着一个很严重的错误:当veci.erase(iter)之后,iter就变成了一个野指针,对一个野指针进行 iter++ 是肯定会出错的。 查看MSDN,对于erase的返回值是这样描述的: An iterator that designates the first element remaining beyond any elements removed, or a pointer to the end of the vector if no such element exists, 于是改代码: for(vector<int>::iterator iter=veci.begin(); iter!=veci.end(); iter++) 这段代码也是错误的: 1)无法删除两个连续的"3"; 2)当3位于vector最后位置的时候,也会出错(在veci.end()上执行 ++ 操作) 正确的代码应该为: for(vector<int>::iterator iter=veci.begin(); iter!=veci.end(); ) vector中的erase方法效率是很低的,因为为了保持vector中元素在内存空间中的连续性,在删除某个元素之后,需要将其后的元素依次向前移动一个位置,平均复杂度为o(n)。 gcc 下erase的实现如下: iterator erase(iterator position) |
vector -- STL中容器的常用函数
最新推荐文章于 2023-08-23 23:27:20 发布
STL:标准模板库,是很多聪明人的杰作总结所成,会用即可