C++ vector

一、vector 核心概念

vector是 C++ 标准库(STL)提供的动态数组容器,相比普通数组:

  • 无需提前指定固定大小,可自动扩容;
  • 支持随机访问(和数组一样用[]访问元素);
  • 内置丰富的操作函数(增删改查),无需手动管理内存。

简单说:vector = 动态数组 + 便捷的操作方法,是 C++ 开发中存储一组同类型数据的首选。

二、基础使用步骤(新手必会)

1. 头文件与命名空间

使用vector必须包含头文件,且建议使用std命名空间(避免重复写std::):

cpp

运行

复制代码
#include <vector>  // 核心头文件
#include <iostream>
using namespace std; // 可选,不写的话所有vector操作要加std::
2. 定义与初始化

cpp

运行

复制代码
// 1. 空vector(最常用)
vector<int> vec1; 

// 2. 初始化时指定大小,元素默认值为0
vector<int> vec2(5); // 包含5个int,值都是0

// 3. 指定大小+初始值
vector<int> vec3(5, 10); // 包含5个int,值都是10

// 4. 用数组/列表初始化(C++11及以上)
vector<int> vec4 = {1, 2, 3, 4, 5}; 
vector<int> vec5({1, 2, 3});

// 5. 用其他vector初始化
vector<int> vec6(vec4); // 复制vec4的所有元素

三、常用操作(高频考点 / 开发常用)

操作 代码示例 功能说明
添加元素(尾部) vec.push_back(6); 向 vector 末尾添加元素,自动扩容
获取元素 vec[0] / vec.at(0) 访问第 1 个元素(at会做越界检查,更安全)
获取大小 vec.size() 返回当前元素个数
判断是否为空 vec.empty() 空返回 true,非空返回 false
清空元素 vec.clear() 清空所有元素(size 变为 0,容量不变)
删除尾部元素 vec.pop_back(); 删除最后一个元素
插入元素(任意位置) vec.insert(vec.begin()+2, 9); 在第 3 个位置插入 9
删除元素(任意位置) vec.erase(vec.begin()+1); 删除第 2 个元素
预留容量 vec.reserve(100); 提前分配 100 个元素的空间,避免频繁扩容
完整示例代码(可直接运行)

cpp

运行

复制代码
#include <vector>
#include <iostream>
using namespace std;

int main() {
    // 1. 定义并初始化
    vector<int> vec = {1, 2, 3};
    
    // 2. 添加元素
    vec.push_back(4); // vec: [1,2,3,4]
    vec.push_back(5); // vec: [1,2,3,4,5]
    
    // 3. 访问元素
    cout << "第1个元素:" << vec[0] << endl; // 输出1
    cout << "第3个元素:" << vec.at(2) << endl; // 输出3
    
    // 4. 遍历元素(三种常用方式)
    cout << "遍历方式1 - 下标:";
    for (int i = 0; i < vec.size(); i++) {
        cout << vec[i] << " ";
    }
    cout << endl;
    
    cout << "遍历方式2 - 范围for(C++11+):";
    for (int num : vec) {
        cout << num << " ";
    }
    cout << endl;
    
    cout << "遍历方式3 - 迭代器:";
    for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++) {
        cout << *it << " ";
    }
    cout << endl;
    
    // 5. 修改与删除
    vec[1] = 20; // 修改第2个元素为20,vec: [1,20,3,4,5]
    vec.pop_back(); // 删除最后一个元素,vec: [1,20,3,4]
    vec.erase(vec.begin()+2); // 删除第3个元素,vec: [1,20,4]
    
    cout << "修改后size:" << vec.size() << endl; // 输出3
    
    return 0;
}
输出结果:

plaintext

复制代码
第1个元素:1
第3个元素:3
遍历方式1 - 下标:1 2 3 4 5 
遍历方式2 - 范围for(C++11+):1 2 3 4 5 
遍历方式3 - 迭代器:1 2 3 4 5 
修改后size:3

四、核心特性与注意事项

1. 自动扩容机制
  • vector默认扩容时会分配原来 2 倍的空间(不同编译器可能略有差异);
  • 频繁push_back导致的扩容会消耗性能,若提前知道元素数量,用reserve(n)预留空间可避免频繁扩容。
2. 越界访问问题
  • vec[i]:不做越界检查,越界会导致程序崩溃(和普通数组一样);
  • vec.at(i):会做越界检查,越界抛出out_of_range异常,新手建议优先用at
3. 适用场景
  • 适合需要动态添加 / 删除元素随机访问的场景(如存储用户列表、算法题中的临时数据);
  • 不适合频繁在头部 / 中间插入删除(效率低),这类场景建议用list

总结

  1. vector是 C++ 动态数组,核心优势是动态扩容 + 随机访问 + 便捷操作,是存储同类型数据的首选;
  2. 新手必记操作:push_back(添加)、size()(大小)、[]/at(访问)、clear()(清空);
  3. 注意:避免频繁扩容(用reserve),优先用at访问元素(更安全)。
相关推荐
Chester_19994 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
裕晟资质规划6 小时前
武器装备科研生产单位保密资质申请方法论:条件模型与流程拆解
人工智能·算法
EXI-小洲6 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员6 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导6 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan6 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
小灰灰搞电子6 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化6 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
m0_695251496 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
en.en..7 小时前
C语言 标准输入 / 输出缓冲区
算法