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()传回最后一个数据,不检查这个数据是否存在。

猜你喜欢

转载自www.cnblogs.com/wouble/p/8961442.html