C++ STL 之 vector容器汇总

C++STL(1) vector容器汇总

一、概述

std::vector是C++标准库中的一个容器,它提供了动态数组的功能。它是一个模板类,可以存储不同类型的元素,并且可以根据需要自动调整大小。std::vector是C++中最常用的容器之一,因为它具有灵活性、高效性和易用性。

二、详细介绍及用法

下面是一些关于std::vector的详细介绍:

  1. 头文件和命名空间:使用std::vector需要包含头文件<vector>,并使用std命名空间。例如:#include <vector>using namespace std;

  2. 声明和初始化:可以使用std::vector模板类声明一个向量,并通过不同的方式进行初始化。例如:

    std::vector<int> vec; // 声明一个整型向量
    std::vector<double> vec2(5); // 声明一个具有5个元素的双精度浮点型向量
    std::vector<std::string> vec3 = {"apple", "banana", "orange"}; // 声明并初始化一个字符串向量
    
  3. 添加和访问元素:可以使用push_back()方法将元素添加到向量的末尾,也可以使用下标操作符[]访问指定位置的元素。例如:

    vec.push_back(10); // 添加元素到向量末尾
    int value = vec[0]; // 访问向量中的第一个元素
    
  4. 获取向量大小:可以使用size()方法获取向量中的元素数量。例如:

    int size = vec.size(); // 获取向量的大小
    
  5. 遍历向量:可以使用循环结构(如for循环或迭代器)遍历向量中的元素。例如:

    for (int i = 0; i < vec.size(); i++) {
        std::cout << vec[i] << " ";
    }
    
  6. 动态调整大小std::vector可以根据需要自动调整大小。当向量的元素数量超过当前容量时,向量会自动重新分配更大的内存空间,以容纳更多的元素。例如:

    vec.resize(10); // 调整向量的大小为10,多余的元素会用默认值进行填充
    
  7. 插入元素:可以使用insert()方法在指定位置插入一个或多个元素。例如:

    std::vector<int> vec = {1, 2, 3, 4};
    vec.insert(vec.begin() + 2, 10); // 在索引为2的位置插入元素10
    vec.insert(vec.begin() + 3, 2, 20); // 在索引为3的位置插入两个元素20
    
  8. 删除元素:可以使用erase()方法删除指定位置的一个或多个元素。例如:

    std::vector<int> vec = {1, 2, 3, 4};
    vec.erase(vec.begin() + 1); // 删除索引为1的元素
    vec.erase(vec.begin() + 2, vec.begin() + 4); // 删除索引为2到3的元素
    
  9. 清空向量:可以使用clear()方法清空向量中的所有元素。例如:

    std::vector<int> vec = {1, 2, 3, 4};
    vec.clear(); // 清空向量中的所有元素
    
  10. 获取首尾元素:可以使用front()back()方法分别获取向量的第一个和最后一个元素。例如:

    std::vector<int> vec = {1, 2, 3, 4};
    int first = vec.front(); // 获取第一个元素
    int last = vec.back(); // 获取最后一个元素
    
  11. 判断向量是否为空:可以使用empty()方法检查向量是否为空,返回一个布尔值。例如:

    std::vector<int> vec = {1, 2, 3, 4};
    bool isEmpty = vec.empty(); // 检查向量是否为空
    
  12. 访问迭代器:可以使用迭代器来遍历向量或访问元素。例如:

    std::vector<int> vec = {1, 2, 3, 4};
    for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }
    
  13. 获取迭代器:可以使用begin()end()方法获取指向向量开头和结尾的迭代器。例如:

    std::vector<int> vec = {1, 2, 3, 4};
    std::vector<int>::iterator it = vec.begin(); // 获取向量的起始迭代器
    std::vector<int>::iterator endIt = vec.end(); // 获取向量的结束迭代器
    
  14. 反向遍历:可以使用rbegin()rend()方法从向量的末尾开始反向遍历。例如:

    std::vector<int> vec = {1, 2, 3, 4};
    for (std::vector<int>::reverse_iterator rit = vec.rbegin(); rit != vec.rend(); ++rit) {
        std::cout << *rit << " ";
    }
    
  15. 交换向量:可以使用swap()方法交换两个向量的内容。例如:

    std::vector<int> vec1 = {1, 2, 3};
    std::vector<int> vec2 = {4, 5, 6};
    vec1.swap(vec2); // 交换vec1和vec2的内容
    
  16. 获取容量:可以使用capacity()方法获取向量的当前容量,即它可以容纳的元素数量。例如:

    std::vector<int> vec = {1, 2, 3};
    int capacity = vec.capacity(); // 获取向量的容量
    
  17. 重新分配内存:可以使用reserve()方法预留一定数量的内存空间,以避免频繁的重新分配。例如:

    std::vector<int> vec;
    vec.reserve(100); // 预留100个元素的内存空间
    
  18. 使用自定义比较函数排序:可以使用sort()方法对向量进行排序,并通过自定义的比较函数指定排序顺序。例如:

    bool compare(int a, int b) {
        return a > b; // 自定义比较函数,按降序排序
    }
    
    std::vector<int> vec = {3, 1, 4, 2};
    std::sort(vec.begin(), vec.end(), compare); // 使用自定义比较函数排序
    
  19. 查找元素:可以使用std::find()算法函数在向量中查找指定的元素。例如:

    std::vector<int> vec = {1, 2, 3, 4};
    std::vector<int>::iterator it = std::find(vec.begin(), vec.end(), 3); // 查找元素3
    if (it != vec.end()) {
        // 元素找到
    } else {
        // 元素未找到
    }
    
  20. 替换元素:可以使用std::replace()算法函数将向量中的指定元素替换为新的元素值。例如:

    std::vector<int> vec = {1, 2, 3, 2, 4};
    std::replace(vec.begin(), vec.end(), 2, 5); // 将元素2替换为5
    
  21. 计数元素:可以使用std::count()算法函数计算向量中指定元素的出现次数。例如:

    std::vector<int> vec = {1, 2, 3, 2, 4};
    int count = std::count(vec.begin(), vec.end(), 2); // 计算元素2的出现次数
    
  22. 部分排序:可以使用std::partial_sort()算法函数对向量的一部分元素进行排序。例如:

    std::vector<int> vec = {4, 2, 1, 3, 5};
    std::partial_sort(vec.begin(), vec.begin() + 3, vec.end()); // 将前3个元素进行排序
    
  23. 截取子向量:可以使用std::vector的构造函数和迭代器来截取原始向量的一部分,创建一个新的子向量。例如:

    std::vector<int> vec = {1, 2, 3, 4, 5};
    std::vector<int> subVec(vec.begin() + 1, vec.begin() + 4); // 截取索引1到3的元素,创建子向量
    
  24. 逆转向量:可以使用std::reverse()算法函数将向量中的元素进行逆序排列。例如:

    std::vector<int> vec = {1, 2, 3, 4, 5};
    std::reverse(vec.begin(), vec.end()); // 将向量中的元素逆序排列
    

三、排序(其实会前两个就可以了,hh)

  1. std::sort():对向量中的元素进行升序排序。例如:

    std::vector<int> vec = {4, 2, 1, 3, 5};
    std::sort(vec.begin(), vec.end());
    
  2. std::partial_sort():对向量中的部分元素进行排序,使得指定范围内的元素处于升序排列,而其余元素的顺序不确定。例如:

    std::vector<int> vec = {4, 2, 1, 3, 5};
    std::partial_sort(vec.begin(), vec.begin() + 3, vec.end());
    
  3. std::nth_element():对向量中的元素进行部分排序,使得第n个元素处于正确的位置,而不关心其他元素的顺序。例如:

    std::vector<int> vec = {4, 2, 1, 3, 5};
    std::nth_element(vec.begin(), vec.begin() + 2, vec.end());
    
  4. std::stable_sort():对向量中的元素进行升序排序,保持相等元素的相对顺序不变。例如:

    std::vector<int> vec = {4, 2, 1, 3, 5};
    std::stable_sort(vec.begin(), vec.end());
    
  5. std::partial_sort_copy():将向量中的元素的部分排序结果存储到另一个向量中。例如:

    std::vector<int> vec = {4, 2, 1, 3, 5};
    std::vector<int> result(3);
    std::partial_sort_copy(vec.begin(), vec.end(), result.begin(), result.end());
    

这些排序算法函数提供了不同的排序方式和灵活性,可以根据具体需求选择适当的函数。请注意,这些函数都需要包含头文件<algorithm>

四、结语

std::vector是C++标准库的一部分,您可以在C++官方文档中找到有关std::vector的详细信息。以下是C++官方文档的网址:
官方文档
链接放在这里(https://en.cppreference.com/w/cpp/container/vector)

在该网址上,您可以找到有关std::vector的完整文档,包括类定义、成员函数、操作示例以及与其他容器的比较等内容。该文档提供了对std::vector的广泛覆盖,以及对每个成员函数的详细描述和用法示例。

请注意,该文档是英文文档。

  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pigwantofly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值