C++ vector容器有哪些常用方法?高频使用函数汇总

来源:编程学习作者:深圳SEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《C++ vector容器有哪些常用方法?高频使用函数汇总》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C++ vector容器有哪些常用方法?高频使用函数汇总》有用,将其分享出去将是对创作者最好的鼓励。

C++的vector是标准模板库提供的动态数组容器,能够根据需要自动调整大小,支持随机访问,是日常开发中使用频率最高的容器之一。掌握它的常用方法能够大幅提升编码效率。

C++ vector容器有哪些常用方法?高频使用函数汇总

元素访问相关方法

vector提供了多种访问内部元素的方式,不同方法的适用场景有所区别。

operator[]

通过下标直接访问元素,不进行越界检查,访问效率最高。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4};
    // 下标访问,不检查越界
    std::cout << vec[0] << std::endl; // 输出1
    std::cout << vec[3] << std::endl; // 输出4
    return 0;
}

at()方法

通过下标访问元素,会进行越界检查,如果下标超出范围会抛出std::out_of_range异常,安全性更高。

#include <iostream>
#include <vector>
#include <stdexcept>

int main() {
    std::vector<int> vec = {1, 2, 3};
    try {
        // 越界访问会抛出异常
        std::cout << vec.at(5) << std::endl;
    } catch (const std::out_of_range& e) {
        std::cout << "越界错误: " << e.what() << std::endl;
    }
    return 0;
}

front()和back()

分别返回容器的第一个元素和最后一个元素的引用,调用前需要确保容器不为空。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {10, 20, 30};
    std::cout << "第一个元素: " << vec.front() << std::endl; // 输出10
    std::cout << "最后一个元素: " << vec.back() << std::endl; // 输出30
    return 0;
}

data()方法

返回指向底层连续存储数组的指针,可用于和C风格接口交互。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3};
    int* p = vec.data();
    // 通过指针访问元素
    std::cout << p[1] << std::endl; // 输出2
    return 0;
}

容量相关方法

这类方法用于查询或调整vector的容量和大小。

size()和empty()

size()返回当前容器中元素的数量,empty()判断容器是否为空,返回布尔值。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec1;
    std::vector<int> vec2 = {1, 2, 3};
    std::cout << "vec1是否为空: " << vec1.empty() << std::endl; // 输出1(true)
    std::cout << "vec2元素数量: " << vec2.size() << std::endl; // 输出3
    return 0;
}

capacity()和reserve()

capacity()返回当前容器已分配的内存能容纳的元素数量,reserve(n)预分配至少能容纳n个元素的内存,避免频繁扩容带来的性能开销。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec;
    std::cout << "初始容量: " << vec.capacity() << std::endl; // 输出0
    vec.reserve(10); // 预分配至少10个元素的容量
    std::cout << "预分配后容量: " << vec.capacity() << std::endl; // 输出大于等于10
    return 0;
}

resize()

调整容器的大小,如果新的大小大于当前大小,会用默认值或者指定值填充新增元素;如果小于当前大小,会删除多余的元素。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3};
    vec.resize(5); // 大小调整为5,新增元素用0填充
    for (int num : vec) {
        std::cout << num << " "; // 输出1 2 3 0 0
    }
    std::cout << std::endl;
    vec.resize(2); // 大小调整为2,删除后3个元素
    for (int num : vec) {
        std::cout << num << " "; // 输出1 2
    }
    return 0;
}

修改容器相关方法

这类方法用于向容器中添加、删除元素,或者修改容器内容。

push_back()和pop_back()

push_back(val)在容器末尾添加一个元素,pop_back()删除容器末尾的元素,调用pop_back()前需要确保容器不为空。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec;
    vec.push_back(10); // 末尾添加10
    vec.push_back(20); // 末尾添加20
    for (int num : vec) {
        std::cout << num << " "; // 输出10 20
    }
    std::cout << std::endl;
    vec.pop_back(); // 删除末尾元素
    for (int num : vec) {
        std::cout << num << " "; // 输出10
    }
    return 0;
}

insert()

在指定位置插入一个或多个元素,第一个参数是迭代器指向的插入位置,后面的参数是要插入的元素或元素范围。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3};
    // 在第二个位置(索引1)插入元素10
    vec.insert(vec.begin() + 1, 10);
    for (int num : vec) {
        std::cout << num << " "; // 输出1 10 2 3
    }
    std::cout << std::endl;
    // 插入3个值为20的元素
    vec.insert(vec.end(), 3, 20);
    for (int num : vec) {
        std::cout << num << " "; // 输出1 10 2 3 20 20 20
    }
    return 0;
}

erase()

删除指定位置或指定范围的元素,参数是迭代器,返回被删除元素之后的第一个有效迭代器。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    // 删除第二个元素(索引1)
    vec.erase(vec.begin() + 1);
    for (int num : vec) {
        std::cout << num << " "; // 输出1 3 4 5
    }
    std::cout << std::endl;
    // 删除前两个元素(索引0和1)
    vec.erase(vec.begin(), vec.begin() + 2);
    for (int num : vec) {
        std::cout << num << " "; // 输出4 5
    }
    return 0;
}

clear()

清空容器中的所有元素,调用后size()返回0,但capacity()通常不会变化。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4};
    vec.clear();
    std::cout << "清空后元素数量: " << vec.size() << std::endl; // 输出0
    std::cout << "清空后容量: " << vec.capacity() << std::endl; // 输出4(容量不变)
    return 0;
}

swap()

交换两个vector的内容,包括元素和容量,效率很高,是O(1)操作。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec1 = {1, 2, 3};
    std::vector<int> vec2 = {4, 5};
    vec1.swap(vec2);
    std::cout << "vec1元素: ";
    for (int num : vec1) {
        std::cout << num << " "; // 输出4 5
    }
    std::cout << std::endl;
    std::cout << "vec2元素: ";
    for (int num : vec2) {
        std::cout << num << " "; // 输出1 2 3
    }
    return 0;
}

迭代器相关方法

vector提供了多种迭代器用于遍历容器元素。

方法说明
begin()返回指向第一个元素的迭代器
end()返回指向最后一个元素之后位置的迭代器
rbegin()返回指向最后一个元素的反向迭代器
rend()返回指向第一个元素之前位置的反向迭代器
cbegin()/cend()返回const迭代器,不能修改指向的元素

迭代器的基本使用示例如下:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4};
    // 正向迭代器遍历
    std::cout << "正向遍历: ";
    for (auto it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;
    // 反向迭代器遍历
    std::cout << "反向遍历: ";
    for (auto it = vec.rbegin(); it != vec.rend(); ++it) {
        std::cout << *it << " ";
    }
    return 0;
}

使用注意事项

  • 使用operator[]访问元素时要确保下标合法,避免越界访问导致未定义行为。
  • 频繁向vector末尾添加元素时,提前用reserve()预分配容量可以减少扩容次数,提升性能。
  • 调用pop_back()front()back()等方法前,要先判断容器是否为空。
  • vector的迭代器在插入、删除元素后可能会失效,不要使用失效的迭代器继续操作容器。

C++_vectorvector常用方法vector容器vector高频函数修改时间:2026-07-02 14:15:23

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。