初始化 stdvector

声明时, 可以通过多种方式初始化 std::vector

Version >= C++ 11

std::vector<int> v{ 1, 2, 3 };  // v becomes {1, 2, 3}

// Different from std::vector<int> v(3, 6)
std::vector<int> v{ 3, 6 };     // v becomes {3, 6}
// Different from std::vector<int> v{3, 6} in C++11
std::vector<int> v(3, 6);  // v becomes {6, 6, 6}

std::vector<int> v(4);     // v becomes {0, 0, 0, 0}

可以通过多种方式从另一个容器初始化向量:

复制构造(仅从另一个向量),从 v2 复制数据:

std::vector<int> v(v2);
std::vector<int> v = v2;

Version >= C++ 11

移动构造(仅从另一个向量),从 v2 移动数据:

std::vector<int> v(std::move(v2));
std::vector<int> v = std::move(v2);

迭代器(范围)复制构造,将元素复制到 v

// from another vector
std::vector<int> v(v2.begin(), v2.begin() + 3); // v becomes {v2[0], v2[1], v2[2]}

// from an array
int z[] = { 1, 2, 3, 4 };
std::vector<int> v(z, z + 3);                   // v becomes {1, 2, 3}

// from a list
std::list<int> list1{ 1, 2, 3 };
std::vector<int> v(list1.begin(), list1.end()); // v becomes {1, 2, 3}

Version >= C++ 11

迭代器移动构造,使用 std::make_move_iterator ,将元素移动到 v

// from another vector
std::vector<int> v(std::make_move_iterator(v2.begin()),
                   std::make_move_iterator(v2.end());

// from a list
std::list<int> list1{ 1, 2, 3 };
std::vector<int> v(std::make_move_iterator(list1.begin()),
                   std::make_move_iterator(list1.end()));

assign() 成员函数的帮助下,std::vector 可以在构建后重新初始化:

v.assign(4, 100);                      // v becomes {100, 100, 100, 100}

v.assign(v2.begin(), v2.begin() + 3);  // v becomes {v2[0], v2[1], v2[2]}

int z[] = { 1, 2, 3, 4 };
v.assign(z + 1, z + 4);                // v becomes {2, 3, 4}