<vector> 数据结构

<vector> 是 C++ 标准库中的一个动态数组类模板,提供了一个可以自动扩展大小的数组实现。std::vector 是 C++ 标准库中最常用的数据结构之一,广泛应用于需要动态调整大小的场景。

1. 类介绍

std::vector 是一个封装了动态数组的类模板,提供了对元素的快速访问、动态扩展以及一系列便利的操作接口。它是一个序列容器,支持随机访问和快速的元素插入和删除操作。

1.1 基本操作

创建和初始化:

#include <vector>

int main() {
    // 创建一个空的 vector
    std::vector<int> vec1;

    // 创建一个指定大小并用默认值初始化的 vector
    std::vector<int> vec2(10); // 包含 10 个 int 元素,每个元素初始化为 0

    // 创建一个指定大小并用特定值初始化的 vector
    std::vector<int> vec3(5, 42); // 包含 5 个 int 元素,每个元素初始化为 42

    // 使用列表初始化
    std::vector<int> vec4 = {1, 2, 3, 4, 5}; // 使用列表初始化

    return 0;
}

访问元素:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {10, 20, 30, 40, 50};

    // 使用下标访问
    std::cout << vec[2] << std::endl; // 输出 30

    // 使用 at() 方法访问(带边界检查)
    std::cout << vec.at(3) << std::endl; // 输出 40

    // 使用 front() 和 back() 方法访问
    std::cout << vec.front() << std::endl; // 输出 10
    std::cout << vec.back() << std::endl;  // 输出 50

    return 0;
}

添加和删除元素:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3};

    // 添加元素到末尾
    vec.push_back(4);
    vec.push_back(5);

    // 插入元素到指定位置
    vec.insert(vec.begin() + 2, 10); // 在索引 2 处插入 10

    // 删除指定位置的元素
    vec.erase(vec.begin() + 1); // 删除索引 1 处的元素

    // 删除末尾的元素
    vec.pop_back();

    // 清空所有元素
    vec.clear();

    return 0;
}

容量和大小:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 获取当前大小和容量
    std::cout << "Size: " << vec.size() << std::endl;   // 输出 5
    std::cout << "Capacity: " << vec.capacity() << std::endl; // 输出当前容量

    // 重新分配容量
    vec.reserve(20); // 设置容量为 20
    std::cout << "New Capacity: " << vec.capacity() << std::endl; // 输出 20

    // 减少容量
    vec.shrink_to_fit(); // 收缩到当前元素数量

    return 0;
}

2. 高级操作

迭代器:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用迭代器遍历
    for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    // 使用范围-based for 循环
    for (const auto& value : vec) {
        std::cout << value << " ";
    }
    std::cout << std::endl;

    return 0;
}

排序和查找:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {5, 3, 8, 1, 2};

    // 排序
    std::sort(vec.begin(), vec.end());

    // 查找元素
    auto it = std::find(vec.begin(), vec.end(), 3);
    if (it != vec.end()) {
        std::cout << "Found: " << *it << std::endl;
    }

    return 0;
}

3. 总结

<vector> 提供了一个动态大小的数组实现,具有自动扩展和快速访问的优点。它支持多种操作,包括元素的添加、删除、访问、排序和查找。通过掌握 std::vector 的基本操作和高级功能,可以有效地管理动态数据,满足各种编程需求。