1.vector
向量序列容器代表阵列,可以改变大小。
就像数组,向量中使用连续的存储位置的元素,这意味着他们的元素也可以使用普通指针的偏移量对其元素的访问,就尽在阵列。但不同的阵列,其大小可以动态变化,其存储的容器自动处理。
在内部,向量中使用动态分配的数组来存储他们的元素。这可能需要重新分配的数组,以扩大规模时,新的元素插入,这意味着分配一个新的数组元素和移动它。这是一个相对较昂贵的任务的处理时间,和因此,载体不分配每次添加一个元素到容器。
相反,向量容器分配一些额外的存储空间来容纳可能增长,因此容器可能实际容量大于存储严格需要包含它的元素(即。它的大小)。库可以实现不同的战略增长的内存使用和reallocations之间的平衡,但在任何情况下,reallocations应该只发生在对数生长时间间隔的大小,以便插入单个元素的向量与摊销可以提供恒定的时间复杂度(见push_back方法)。
因此,相对于阵列,在存储和管理的一种有效方法动态成长的能力消耗更多的内存交换载体。
相比其他动态序列容器(双端队列,列表和forward_lists),载体是非常有效的访问元素(如数组)和相对有效的添加或移除元素的结束。操作涉及插入或删除其他的结束位置的元素,他们的表现比别人差,和不一致的迭代器和引用的列表和forward_lists比。
2.vector容器属性:
序列
元素按顺序容器在一个严格的线性序列上是有序的。单个元素在这个序列访问他们的立场。
动态数组
允许直接访问序列中的任何元素,甚至通过指针算法,提供了相对快速添加/删除元素的序列。
Allocator-aware
容器使用一个分配器对象动态地处理它的存储需求。
3.vector容器中常用的函数。(c为一个容器对象)
c.push_back(elem); 在容器最后位置添加一个元素elem
c.pop_back(); 删除容器最后位置处的元素
c.at(index); 返回指定index位置处的元素
c.begin(); 返回指向容器最开始位置数据的指针
c.end(); 返回指向容器最后一个数据单元的指针+1
c.front(); 返回容器最开始单元数据的引用
c.back(); 返回容器最后一个数据的引用
c.max_size(); 返回容器的最大容量
c.size(); 返回当前容器中实际存放元素的个数
c.capacity(); 同c.size()
c.resize(); 重新设置vector的容量
c.reserve(); 同c.resize()
c.erase(p); 删除指针p指向位置的数据,返回下指向下一个数据位置的指针(迭代器)
c.erase(begin,end) 删除begin,end区间的数据,返回指向下一个数据位置的指针(迭代器)
c.clear(); 清除所有数据
c.rbegin(); 将vector反转后的开始指针返回(其实就是原来的end-1)
c.rend(); 将vector反转后的结束指针返回(其实就是原来的begin-1)
c.empty(); 判断容器是否为空,若为空返回true,否则返回false
c1.swap(c2); 交换两个容器中的数据
c.insert(p,elem); 在指针p指向的位置插入数据elem,返回指向elem位置的指针
c.insert(p,n,elem); 在位置p插入n个elem数据,无返回值
c.insert(p,begin,end) 在位置p插入在区间[begin,end)的数据,无返回值
原文:http://www.cnblogs.com/ckings/p/3674412.html