STL::vector
1,vector 是一个可以动态增长的容器,其访问方式和 array 一样可以进行随机访问,不同的是 vector 在分配存储空间时不是一次一个空间的分配,而是会分配多余的空间,这样在新插入数据时,可以避免 再次分配存储空间的操作造成的性能损失,从而达到一个性能和内存的平衡。
Iterator有下面的几种:
begin:
end:
rbegin:
rend:
cbegin:
cend:
crbegin:
crend:
Capacity
size: Returns the number of elements in the vector,返回 vector 中元素的个数,不一定和 capacity 相同
max_size:
resize: 重新设置 vector 的 容量(size 变化),并不改变当前容器的 capacity(capacity 不变)。如若比当前容量小,则把后面的数据销毁,如若比当前容量大,若没有指定确切的值,则填充值为初始化值,否则填充为指定的确切值。两种语法:resize(size_type n); resize(size_type n,const value_type& val);
capacity: Return size of allocated storage capacity,返回当前已经分配的容量大小,单位为当前可容纳该类型的元素个数。测试为:1,2,4,8,16
empty:
reserve:翻译为:保留,预留。解释: 更改第一次分配的容量大小,如若 myvector.reverse(100),则此时容量为100,跳过了从 1,2,4,8,16 增长的过程。reverse(size_type n),如果 n 比当前容量大,则动态分配容量到 n; 如果 n 比当前容量小,则不改变当前容量,也不改变当前容器内的内容。
shrink_to_fit: Requests the container to reduce its capacity to fit its size,这也许会导致内存重分配情况的发生,但是不会改变容器的 size 和 容器内的元素。
Element access:
operator[ ]:
at:
front:
back:
data: 用法同 array 中的 data;
Modefiers
assign: 为 vector 分配新的内容以代替它原来的内容,其 size 也跟着变化。三种使用方式:assign(InputIterator first,InputIterator last),用一个起始迭代器,一个终止迭代器进行新内容的填充,这两个迭代器可以来自另一个 vector 。assign(size_type n,value_type& val): fill 方式;assign(initializer_list<value_type> li): 用别的序列进行填充,例如数组。
1 int myints[] = {1776,7,4}; 2 third.assign (myints,myints+3); // assigning from array.
push_back:
pop_back:
insert: single element; fill; range; move; initializer list; 5种填充方式;note:iterator 的有效性;(任何改变vector长度的操作都会使已存在的迭代器失效,就不能再信赖迭代器指向的值了)返回值为:新插入的第一个元素的迭代器; https://wenku.baidu.com/view/1b325dc7aa00b52acfc7cafb.html
erase:返回删除元素的下一个元素的迭代器,如果删除的是最后一个元素,则指向该容器的末尾(myvector.end()); 范围删除: [first,end)
swap: 用法:swap (vector& x); 交换两个 vector 的内容;两个vector 可能 size 并不相同。但迭代器仍然保持有效,原来指向的元素不发生变化。
clear: 清空 vector 的元素,但 capacity 可能仍不发生变化,如若要重新分配空间,用:vector<T>().swap(x);// clear x reallocating
emplace(c++11):功能类似于 insert ,不同之处参见:https://blog.csdn.net/penghuicheng/article/details/51505625
emplace_back(c++11): 功能类似于 push_back,不同之处同上。
Construct vector: default; fill; range; copy; move; initializer list;