立此留念。
本篇文章来源于《c++ primer》第四版第四章《容器和算法》和http://www.cplusplus.com/reference/vector/vector/ 上的有关英文文档内容
vector是一个类似于数组的容器,可以储存连续的空间。区别在于:
compared to arrays, vectors consume more memory in exchange for the ability to manage storage and grow dynamically in an efficient way
但我们只需要了解vector的用法(常用于OJ题),和在工程项目中的实践就好。
一. vector的constructor用法有多种,这里选择了c++ 11标准下最常用的四种:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(void)
{
vector<int> v1(); //默认为空白的数组
vector<int> v2(4,100); //vector(n,value),构建n个value值得数组
vector<int> v3(v2); //进行拷贝数组
vector<int> v4(v3.begin(),v3.begin()+v3.size()/2); //用迭代器来实现
for(int i=0;i<v4.size();i++)
cout<<v4[i]<<endl; //输出结果为2个100
}<strong>
</strong>
二. begin、end:返回数组的起始和结束值,begin()指向第一个元素,end()指向最后一个元素的下一位置
rbegin、rend,与上面相反,返回的是逆序迭代器,注意定义指针为vector<int>::reverse_iterator
书上还有提到const_(reverse)_iterator,看是否为只读类型的。
int i=0;
vector<int>::reverse_iterator re = myvector.rbegin();
for (; re!= myvector.rend(); ++rit)
*re = ++i; //从后向前赋值为1,2,3,4,5 按照顺序输出时为1,2,3,4,5
三. vector数组提供了push_back()功能
vector提供了push_back()的方法,在之后添加元素。
而list和deque多提供了方法push_front(),在之前添加元素
for(int i=0;i<4;i++)
list.push_back(i);
list.push_front(i); 两者返回的都是void值。
c.insert(p,t),迭代器p之前添加元素t,返回新元素的迭代器;
// vector<string> v1; v1.insert(v1.begin(),”test”) 等价于v1.push_back(“test”);
// 实现循环赋值
vector<string>::iterator it=v1.begin();
while(it!=v1.end())
it=insert(it,”test”);
c.insert(p,n,t),在p之前添加n个元素t,返回void;
c.insert(p,b,e),在迭代器p指向的元素之前添加迭代器b和e之间元素,返回void
顺便可以实现数组织间赋值
string arr[4]={“1st”,”2nd”,”3rd”,”4th”};
v1.insert(v1.end(),arr,arr+3);
这里还提到了说:比如说我们在循环操作时用it!=v1.end(),而不是
定义last=v1.end(),然后测试it!=last,因为插入元素会导致元素的迭代器失效
9.3.4 关系操作符
只支持同类型数组、同类型元素的比较
比如:vector<int> v1,v2;
abc与abcde比较,abcde更长,后者大;
678与12345比较,第一个6>1,则之后不用比较;
9.3.5 容器的大小操作
c.size() 返回元素个数
c.max_size() 返回可以保存的最多的元素个数
c.empty() 为空,返回true;否,返回false;