目录

  1. vector 概述
  2. vector 的声明与初始化
  3. 常用成员函数
  4. vector 的迭代器
  5. 动态内存管理与性能
  6. 示例代码
  7. 参考资料

1. vector 概述

std::vector 是 C++ 标准模板库(STL)中的一个动态数组容器。它能自动管理内存,当元素个数发生变化时会自动调整大小,并提供随机访问、插入、删除等丰富功能。由于其灵活性和高效性,vector 常被用于需要动态存储数据的场景。


2. vector 的声明与初始化

在使用 std::vector 前,需要包含头文件 <vector>。其基本声明语法为:

#include <vector>

// 声明一个存储 int 类型元素的 vector
std::vector<int> vec;

初始化方式

  • 默认构造:创建一个空的 vector。 std::vector<int> vec;
  • 指定初始大小:创建一个包含指定数量元素的 vector,默认元素值为类型的默认值。 std::vector<int> vec(10); // 创建一个大小为 10 的 vector,元素值均为 0
  • 指定初始大小和初始值std::vector<int> vec(10, 5); // 创建一个大小为 10 的 vector,每个元素初始值为 5
  • 列表初始化(C++11 及以上): std::vector<int> vec = {1, 2, 3, 4, 5};

3. 常用成员函数

std::vector 提供了许多成员函数,用于操作容器中的元素:

  • size():返回当前元素个数。 vec.size();
  • empty():检查容器是否为空。 vec.empty();
  • push_back():在末尾添加一个元素。 vec.push_back(42);
  • pop_back():删除末尾元素。 vec.pop_back();
  • at():通过索引访问元素,并进行范围检查。 int value = vec.at(2);
  • front()back():分别访问第一个和最后一个元素。 int first = vec.front(); int last = vec.back();
  • insert():在指定位置插入元素。 vec.insert(vec.begin() + 2, 100);
  • erase():删除指定位置的元素。 vec.erase(vec.begin() + 2);
  • clear():清空所有元素。 vec.clear();
  • resize():调整 vector 的大小,多出的部分会被默认构造,新减少的元素会丢失。 vec.resize(15);

4. vector 的迭代器

迭代器是访问 vector 内部元素的通用方式,它类似于指针,可以用于遍历容器。常用迭代器包括:

  • begin():返回指向第一个元素的迭代器。
  • end():返回指向容器尾后位置的迭代器。
  • rbegin()rend():返回反向迭代器,用于从后向前遍历。

示例:

#include <vector>
#include <iostream>
using namespace std;

int main() {
    vector<int> vec = {1, 2, 3, 4, 5};
    // 使用迭代器遍历 vector
    for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
        cout << *it << " ";
    }
    cout << endl;
    return 0;
}


5. 动态内存管理与性能

  • 自动管理内存vector 自动处理内存分配和释放,使用时无需担心内存泄漏问题。
  • 容量和大小:除了元素个数(size),vector 还管理一个容量(capacity),即在无需重新分配内存的情况下可以容纳的最大元素数。使用 reserve() 可以预分配内存,提高插入效率。 vec.reserve(100);
  • 性能优化:频繁的插入和删除操作会引起内存重新分配,尽量预估好所需大小,减少 realloc 的次数,提升性能。

6. 示例代码

下面是一个综合示例,展示如何使用 std::vector 完成基本操作:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    // 使用列表初始化 vector
    vector<int> numbers = {5, 3, 8, 1, 9};

    // 输出原始 vector
    cout << "原始 vector: ";
    for (int n : numbers) {
        cout << n << " ";
    }
    cout << endl;

    // 排序 vector
    sort(numbers.begin(), numbers.end());
    cout << "排序后 vector: ";
    for (int n : numbers) {
        cout << n << " ";
    }
    cout << endl;

    // 添加新元素
    numbers.push_back(7);
    cout << "添加元素后 vector: ";
    for (int n : numbers) {
        cout << n << " ";
    }
    cout << endl;

    // 删除第一个元素
    numbers.erase(numbers.begin());
    cout << "删除第一个元素后 vector: ";
    for (int n : numbers) {
        cout << n << " ";
    }
    cout << endl;

    // 清空 vector
    numbers.clear();
    cout << "清空后 vector 大小: " << numbers.size() << endl;

    return 0;
}

输出可能为:

原始 vector: 5 3 8 1 9 
排序后 vector: 1 3 5 8 9 
添加元素后 vector: 1 3 5 8 9 7 
删除第一个元素后 vector: 3 5 8 9 7 
清空后 vector 大小: 0


7. 参考资料


总结

std::vector 是 C++ 中非常常用且功能强大的动态数组容器,提供了自动内存管理、随机访问以及丰富的操作函数。通过了解 vector 的声明、初始化、常用操作和迭代器使用,可以高效地管理动态数据集合。合理使用预分配内存等技术,还能有效提升程序性能。