跳到主要内容

vector 和 array

注意

在 C++ 中,你应该尽量使用 std::vectorstd::array,而不是 C 风格的数组。 原因是 C 风格的数组没有提供任何安全保障,没有越界检查,尽管在算法题中我们经常会用下标访问数组元素 (std::vectorstd::array 中正规的做法是使用 at(idx) 方法)。

vector 和 array 的区别

std::vector 存储在堆上,std::array 存储在栈上。 因此,当你需要一个动态大小的数组时,你应该使用 std::vector, 而当你只需要一个固定大小的数组时,使用 std::array 会更好,它拥有更好的性能。

vector 和 array 的初始化

// 初始化一个大小为 10 的 vector,所有元素的值都是 0
std::vector<int> v1(10);
// 初始化一个大小为 10 的 vector,所有元素的值都是 1
std::vector<int> v2(10, 1);
// 初始化一个大小为 10 的 array,所有元素的值都是 0
std::array<int, 10> a1;
// 通过一个已有的 array 初始化另一个 array
std::array<int, 10> a3 = a2;
// 通过一个已有的 vector 初始化另一个 vector
std::vector<int> v3 = v2;

同时 std::array 还支持通过 fill(n) 方法填充数组。

vector 的插入和删除

// 在末尾插入一个元素
v.push_back(1); v.emplace_back(1);
// 在末尾删除一个元素
v.pop_back();
// 在指定位置插入一个元素
v.insert(v.begin() + 1, 2);
// 在指定位置删除一个元素
v.erase(v.begin() + 1);
// 在指定位置插入另一组vector
v.insert(v.begin() + 1, v2.begin(), v2.end());
auto rg = std::list{1, 2, 3};
v.insert_range(v.begin() + 1, rg);