类模板

std::vector

templete < class T, class Alloc = allocator<T> > class vector; //generic template

vector

Vector 是序列式容器,表示大小可变的数组。

和数组一样的地方是,vector 使用连续的空间位置存储元素,这就意味着可以使用带偏移量的普通指针来访问其中的元素,就和像在数组中一样高效。但是和数组不一样的是,vector 的大小可以动态改变,容器会自动处理它们的存储。

vectors 内部使用一个动态分配的数组来存储它们的元素。当新元素被插入时,这个数组为了增加大小可能需要被重新分配,这意味着分配一个新数组,并将所有元素移动到这个新数组中。在处理时间方面这是一个相对昂贵的开销,因此,当元素被添加到容器时,vectors 不会每次都重新分配空间。

vector 容器可能会分配一些额外的存储空间来适应可能的增长,因此容器真实的 capacity 可能会大于它当前包含的所有元素的大小(也就是它的 size)。不同库可以使用不同的增长策略来平衡内存使用和重新分配,但无论如何,重新分配的区间大小应该呈对数级增长,这样单个元素插入 vector 的尾部才能分摊成常数时间复杂度(请查看 push_back)。

因此,和数组相比,vector 会消耗更多的内存来换取管理存储以及动态增长的高效性。

与其他动态序列式容器(dequeslistsforward_lists)相比,vector 访问它的元素还是很高效的,在尾部添加和移除元素相对也很高效。在除了尾部以外的位置插入或移除元素,vector 都没有其他容器高效,并且比 listsforward_lists 拥有更少的稳定的迭代器(迭代器会失效)。

容器属性

序列化

序列式容器中的元素排列在一个严格线性的序列中。元素可以通过它们在序列中的位置来访问。

动态数组

允许直接访问序列中的任何元素,即使通过指针算数,并且能相对快速地从序列尾部添加/删除元素

内存分配器感知的

容器使用一个内存分配器对象来动态处理它的存储需求。

模板参数

T

元素的类型。
仅仅当 T 保证移动的时候不抛出异常,实现才能在重新分配内存的时候进行优化,用移动元素的方式代替拷贝。
别名是成员类型 vector::value_type

Alloc

内存分配器对象的类型,用来定义存储分配器模型。默认使用 allocator 类模板,它定义了最简单的内存分配模型并且是与值无关的。
别名是成员类型 vector::allocator_type

成员类型

C++98

类型名 定义 注释
value_type 第一个模板参数 (T)
allocator_type 第二个模板参数 (Alloc) 默认值为:allocator<value_type>
reference allocator_type::reference 对于默认的 allocator :value_type&
const_reference allocator_type::const_reference 对于默认的 allocator :const value_type&
pointer allocator_type::pointer 对于默认的 allocator :value_type*
const_pointer allocator_type::const_pointer 对于默认的 allocator :const value_type*
iterator 一个指向 value_type 的随机访问迭代器 可以转化为 const_iterator
const_iterator 一个指向 const value_type 的随机访问迭代器
reverse_iterator reverse_iterator<iterator>
const_reverse_iterator reverse_iterator<const_iterator>
difference_type 一个有符号整数类型,相当于:iterator_traits<iterator>::difference_type 通常和 ptrdiff_t 一样
size_type 一个无符号整数类型,可以表示任何 difference_type 的非负值 通常和 size_t 一样

C++11

类型名 定义 注释
value_type 第一个模板参数 (T)
allocator_type 第二个模板参数 (Alloc) 默认值为:allocator<value_type>
reference value_type&
const_reference const value_type&
pointer allocator_traits<allocator_type>::pointer 对于默认的 allocator :value_type*
const_pointer allocator_traits<allocator_type>::const_pointer 对于默认的 allocator :const value_type*
iterator 一个指向 value_type 的随机访问迭代器 可以转化为 const_iterator
const_iterator 一个指向 const value_type 的随机访问迭代器
reverse_iterator reverse_iterator<iterator>
const_reverse_iterator reverse_iterator<const_iterator>
difference_type 一个有符号整数类型,相当于:iterator_traits<iterator>::difference_type 通常和 ptrdiff_t 一样
size_type 一个无符号整数类型,可以表示任何 difference_type 的非负值 通常和 size_t 一样

成员函数

非成员函数重载

模板特殊化