专业编程基础技术教程

网站首页 > 基础教程 正文

C++ vector 简介

ccvgpt 2024-12-06 13:10:06 基础教程 6 ℃

vector是一个动态数组,用于存储一组连续的、同类型的元素。它的大小可以根据需要动态变化,而且能够进行快速的插入和删除操作,因此在实际开发中经常被使用。

vector是C++ STL中的一种容器,其定义在头文件<vector>中。它是一个模板类,可以存储任何类型的数据。

C++ vector 简介

初始化代码示例:

vector<int> vec1; // 默认初始化,创建一个空的vector
vector<int> vec2(10); // 创建一个大小为10的vector,其中每个元素的值为0
vector<int> vec3(10, 1); // 创建一个大小为10的vector,其中每个元素的值为1
vector<int> vec4{1, 2, 3, 4, 5}; // 创建一个包含5个元素的vector,元素的值分别为1, 2, 3, 4, 5
vector<int> vec5 = {1, 2, 3, 4, 5}; // 同上,使用等号赋值初始化
// 使用迭代器来初始化vector:
vector<int> vec6(vec5.begin(), vec5.end()); // 将vec5中的元素拷贝到vec6中
// vector还支持通过拷贝构造函数进行初始化
vector<int> vec7(vec6); // 将vec6拷贝到vec7中

动态扩容

在向 vector 中添加元素时,如果 vector 的大小已经等于其容量,则需要动态扩容。动态扩容的过程会为 vector 分配新的内存空间,并将旧的元素复制到新的内存空间中。由于内存的分配和元素的复制都是非常耗时的操作,因此动态扩容的过程会导致性能下降。因此,在设计程序时需要尽量避免频繁的扩容操作。

vector 的扩容操作是通过调用成员函数 reserve() 和 resize() 来完成的。其中,reserve() 函数用于预分配内存空间,而 resize() 函数则用于改变 vector 的大小。

如果v.reserve(n)函数的n的大小比vector原来的容量小。容量没有变化。size也没有变:

如果v.resize(n)函数的n比vector原来的size小,结果是size减小到n,然后删除n之后的数据。

向vector添加元素

向vector添加元素是一个常见的操作,可以使用push_back方法,它会在vector的末尾插入元素。另外,也可以使用insert方法在任意位置插入元素。

vector<int> vec{1, 2, 3};

vec.push_back(4); // 向末尾添加元素
vec.insert(vec.begin() + 1, 5); // 在第二个位置插入元素5

// vec现在为 {1, 5, 2, 3, 4}

遍历 vector

vector<int> nums = { 1, 2, 3, 4, 5 };
for (int i = 0; i < nums.size(); i++) {
    cout << nums[i] << " ";
}

vector<int> nums = { 1, 2, 3, 4, 5 };
for (auto it = nums.begin(); it != nums.end(); it++) {
    cout << *it << " ";
}

vector<int> nums = { 1, 2, 3, 4, 5 };
for (auto num : nums) {
    cout << num << " ";
}

vector常见删除和更新的方法

  1. erase() 函数:用于从 vector 中删除一个或多个元素。它接受一个迭代器或迭代器范围作为参数,表示要删除的元素的位置。
std::vector<int> v = {1, 2, 3, 4, 5};
v.erase(v.begin() + 2);  // 删除第三个元素,即 3
// 现在 v = {1, 2, 4, 5}
  1. pop_back() 函数:用于从 vector 尾部删除一个元素。
std::vector<int> v = {1, 2, 3, 4, 5};
v.pop_back();  // 删除最后一个元素,即 5
// 现在 v = {1, 2, 3, 4}
  1. emplace() 函数:用于在指定位置构造一个新元素。它接受一个迭代器作为参数,表示要插入元素的位置,以及要传递给构造函数的参数。
struct Foo {
  int x, y;
  Foo(int x, int y) : x(x), y(y) {}
};
std::vector<Foo> v;
v.emplace(v.begin(), 1, 2);  // 在开头构造一个新的 Foo(1, 2)

最近发表
标签列表