当前位置: 首页> 汽车> 报价 > 上海企业网站模板_长春网站建设长春做网站公司公司_百度官网入口_公司想做个网站怎么办

上海企业网站模板_长春网站建设长春做网站公司公司_百度官网入口_公司想做个网站怎么办

时间:2025/9/8 10:38:35来源:https://blog.csdn.net/2501_91516851/article/details/147240392 浏览次数: 0次
上海企业网站模板_长春网站建设长春做网站公司公司_百度官网入口_公司想做个网站怎么办

一、vector简介

vector是C++标准模板库(STL)中最常用的序列式容器之一,它提供动态数组的功能,能够自动管理内存,在运行时根据需要动态调整大小。

vector的核心特性:

  • 动态数组:底层实现为动态分配的连续内存空间

  • 快速随机访问:支持通过下标直接访问元素(时间复杂度O(1))

  • 尾部高效操作:在末尾插入/删除元素效率高(平均O(1))

  • 自动扩容:当容量不足时自动分配更大的内存空间

  • 类型安全:模板类,支持存储任意类型的数据

    二、vector的基本使用

    1. 头文件与声明

    #include <vector>// 基本声明方式
    std::vector<int> intVec;          // 空vector
    std::vector<double> doubleVec(5); // 包含5个0.0的vector
    std::vector<std::string> strVec = {"Hello", "World"}; // 初始化列表

    2. 常用构造函数

    vector();                          // 默认构造,创建空vector
    vector(size_type n);              // 创建包含n个默认初始化元素的vector
    vector(size_type n, const T& val); // 创建包含n个值为val的元素的vector
    vector(const vector& other);       // 拷贝构造函数
    vector(initializer_list<T> il);    // 初始化列表构造(C++11)

    三、vector的迭代器与元素访问

    1. 迭代器相关函数

    begin()与end()
    std::vector<int> vec = {1, 2, 3, 4, 5};// begin()返回指向第一个元素的迭代器
    auto itBegin = vec.begin();// end()返回指向最后一个元素后面的位置的迭代器
    auto itEnd = vec.end();// 遍历vector
    for (auto it = vec.begin(); it != vec.end(); ++it) {std::cout << *it << " ";
    }
    rbegin()与rend() (反向迭代器)
    // 反向遍历
    for (auto rit = vec.rbegin(); rit != vec.rend(); ++rit) {std::cout << *rit << " ";
    }
    cbegin()与cend() (C++11 const迭代器)
    // const迭代器,不能用于修改元素
    for (auto cit = vec.cbegin(); cit != vec.cend(); ++cit) {std::cout << *cit << " ";
    }

    2. 元素访问函数

    front()与back()
    std::vector<int> vec = {10, 20, 30};// front()返回第一个元素的引用
    int& first = vec.front();  // first = 10// back()返回最后一个元素的引用
    int& last = vec.back();    // last = 30
    operator[]与at()
    // operator[]不进行边界检查(更高效)
    int second = vec[1];       // 20// at()进行边界检查,越界时抛出std::out_of_range异常
    int third = vec.at(2);     // 30
    data() (C++11)
    // 返回指向底层数组的指针
    int* p = vec.data();

    四、vector的修改操作

    1. insert()函数

    insert()函数用于在指定位置插入元素,有多种重载形式:

    std::vector<int> vec = {1, 2, 3};// 在指定位置插入单个元素
    auto it = vec.insert(vec.begin() + 1, 99); 
    // vec: {1, 99, 2, 3}, it指向新插入的99// 在指定位置插入n个相同元素
    vec.insert(vec.end(), 3, 100); 
    // vec: {1, 99, 2, 3, 100, 100, 100}// 在指定位置插入另一个容器的元素范围
    std::vector<int> other = {7, 8, 9};
    vec.insert(vec.begin(), other.begin(), other.end());
    // vec: {7, 8, 9, 1, 99, 2, 3, 100, 100, 100}// 使用初始化列表插入(C++11)
    vec.insert(vec.end(), {200, 300});
    // vec: {7, 8, 9, 1, 99, 2, 3, 100, 100, 100, 200, 300}

    2. push_back()与emplace_back()

    // push_back()在末尾添加元素(拷贝或移动)
    vec.push_back(500);// emplace_back()直接在容器末尾构造元素(更高效,C++11)
    vec.emplace_back(600);

    3. erase()与clear()

    // 删除单个元素
    vec.erase(vec.begin() + 2); // 删除第三个元素// 删除元素范围
    vec.erase(vec.begin() + 1, vec.begin() + 4);// 清空vector
    vec.clear();

    4. pop_back()

    // 删除最后一个元素
    vec.pop_back();

    五、vector的容量操作

    1. size()与capacity()

    std::vector<int> vec = {1, 2, 3};std::cout << "size: " << vec.size();      // 当前元素数量: 3
    std::cout << "capacity: " << vec.capacity(); // 当前容量(可存储元素数量)

    2. resize()与reserve()

    // resize()改变元素数量
    vec.resize(5);      // 增加两个0
    vec.resize(2);      // 删除最后一个元素// reserve()预分配内存
    vec.reserve(100);   // 提前分配至少能容纳100个元素的内存

    3. empty()

    if (vec.empty()) {std::cout << "Vector is empty";
    }

    六、vector的性能与使用建议

  • 预分配内存:如果知道大致大小,使用reserve()减少重新分配次数

  • 优先使用emplace_back:比push_back更高效,避免不必要的拷贝

  • 谨慎使用insert:在非尾部位置插入会导致元素移动,性能较低

  • 迭代器失效插入/删除操作可能导致迭代器失效,需要重新获取

  • vector<bool>的特殊性:标准库对bool类型有特化,行为与其他vector不同

关键字:上海企业网站模板_长春网站建设长春做网站公司公司_百度官网入口_公司想做个网站怎么办

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: