vector 是一种顺序容器,可以看作是可以改变大小的数组。
就像数组一样,vector 占用连续的内存地址来存储元素,因此可以像数组一样用偏移量来随机访问,但是它的大小可以动态改变,容器会自动处理内存分配问题。
在内部,vector 使用动态分配的数组来存储元素,当新元素插入时,如果现有的存储空间已经占满,则需要重新再分配一个新的数组,并且将之前的元素都移动到新的内存上。这个过程是非常耗时的,因此,vector 并不会在每次插入新元素时都重新分配内存。
相反,vector 容器可能会分配一些额外的内存来适应其大小的增长,因此,其真实容量可能比存储这些元素实际需要的内存要大。库通过不同的策略来平衡内存占用和空间再分配,但无论如何,空间分配只应在 vector 大小以对数增长的时候发生,以便在向量末尾插入单个元素可以做到均摊情况下是常数级的时间复杂度。
因此,相对于数组,vector 会消耗更多的内存来换取更有效地对内存进行管理并且动态增长。
相对于其他动态容器,vector 支持随机访问,并且能相对高效地在末尾插入或者删除元素,但如果要在其他位置插入或者删除元素,vector 就会表现得很差,而且迭代器和引用也不是那么方便。
构造函数
explicit vector (const allocator_type& alloc = allocator_type());
默认构造函数,构造出一个不包含任何元素的空的 vector;explicit vector (size_type n);
构造出一个包含个元素的 vector,默认会初始化为 0;explicit vector (size_type n, const value_type& val, const allocator_type& alloc = allocator_type());
构造出一个包含个值为的 vector;vector (InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type());
构造出一个包含迭代器范围内元素的 vector,注意左闭右开;vector (const vector& x);
复制构造函数,构造出一个和相同的 vector;
#include <iostream>
#include <vector>
using namespace std;
int main ()
{
vector<int> first; // 空的 vector
vector<int> second (4, 100); // 包含 4 个值为 100 元素的 vector,[100, 100, 100, 100]
vector<int> third (second.begin(), second.end()); // 包含 second 起始迭代器到终止迭代器区间元素的 vector,[100, 100, 100, 100]
vector<int> fourth (third); // 对 third 的复制,[100, 100, 100, 100]
// 数组也可以用来作为迭代器初始化 vector
int myints[] = {
16, 2, 77, 29};
vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) ); //[16, 2, 77, 29]
vector<int> sixth (4); // [0, 0, 0,