C++ vector用法详解_C++动态数组vector常用操作

vector是C++ STL中动态数组容器,需包含头文件,支持自动内存管理与动态增删元素。可定义为空、指定大小、初值或列表初始化,还能拷贝构造。常用操作包括push_back、pop_back、size、empty、front、back、at、insert、erase等,支持下标访问与迭代器遍历,推荐使用范围for循环。内部连续存储,容量不足时自动扩容,可用reserve预分配空间以提升性能,shrink_to_fit可缩减容量。掌握vector操作有助于提高编程效率与程序稳定性。

vector 是 C++ 标准模板库(STL)中非常重要的容器之一,它提供了动态数组的功能,能够自动管理内存,支持在运行时动态添加或删除元素。相比普通数组,vector 更加灵活、安全,是日常编程中使用频率极高的数据结构。

1. vector 的基本定义与初始化

要使用 vector,需要包含头文件 #include 。以下是常见的定义和初始化方式:

  • vector v; // 创建一个空的整型 vector
  • vector v(5); // 创建包含 5 个元素的 vector,初始值为 0
  • vector v(5, 10); // 创建 5 个元素,每个值都是 10
  • vector v = {1, 2, 3, 4, 5}; // 列表初始化(C++11 起)
  • vector v2(v); // 拷贝构造,v2 是 v 的副本

2. 常用操作与成员函数

vector 提供了丰富的成员函数来操作数据,以下是一些最常用的:

  • v.push_back(x); // 在末尾添加一个元素 x
  • v.pop_back(); // 删除最后一个元素(不返回值)
  • v.size(); // 返回当前元素个数
  • v.empty(); // 判断是否为空,返回 bool
  • v[i]; // 随机访问第 i 个元素(不检查越界)
  • v.at(i); // 访问第 i 个元素,会做越界检查,越界抛出异常
  • v.front(); // 返回第一个元素
  • v.back(); // 返回最后一个元素
  • v.clear(); // 清空所有元素
  • v.insert(it, x); // 在迭代器 it 位置插入元素 x
  • v.erase(it); // 删除迭代器 it 所指元素
  • v.swap(v2); // 与另一个 vector 交换内容

示例代码:

#include 
#include 
using namespace std;

int main() {
    vector v;
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);

    cout << "大小: " << v.size() << endl;
    cout << "第一个元素: " << v.front() << endl;
    cout << "最后一个元素: " << v.back() << endl;

    for (int i = 0; i < v.size(); ++i) {
        cout << v[i] << " ";
    }
    cout << endl;

    v.pop_back();
    cout << "删除最后一个后大小: " << v.size() << endl;
    return 0;
}

3. 迭代器的使用

vector 支持使用迭代器遍历元素,这是 STL 容器的通用方式。

  • begin():指向第一个元素的迭代器
  • end():指向最后一个元素的下一个位置
  • rbegin()rend():反向迭代器

示例:

for (auto it = v.begin(); it != v.end(); ++it) {
    cout << *it << " ";
}

或使用范围 for 循环(推荐):

for (int x : v) {
    cout << x << " ";
}

4. 动态扩容机制

vector 内部使用连续内存存储元素,当容量不足时会自动重新分配更大的空间,并将原数据复制过去。虽然这个过程对用户透明,但频繁插入可能导致性能问题。

  • v.capacity(); // 查看当前容量(可容纳多少元素而不需重新分配)
  • v.reserve(n); // 预分配至少 n 个元素的空间,避免频繁扩容
  • v.shrink_to_fit(); // 尝试减少容量以匹配实际大小(C++11)

建议在已知元素数量时提前 reserve,提升效率。

基本上就这些。掌握 vector 的常用操作能极大提高编码效率和程序稳定性。