vector<int> 的用法

vector<int> 是 C++ 标准模板库(STL)中的一个容器,用于存储动态大小的整数序列。以下是它的主要用法:

基本操作

1. 创建和初始化

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

vector<int> v1;             // 空vector
vector<int> v2(5);          // 包含5个0
vector<int> v3(5, 10);      // 包含5个10
vector<int> v4 = {1, 2, 3}; // 初始化列表(C++11)
vector<int> v5(v4);         // 拷贝构造

2. 添加元素

复制代码
v1.push_back(10);      // 在末尾添加元素10
v1.emplace_back(20);   // 更高效的添加方式(C++11)
v1.insert(v1.begin(), 5); // 在开头插入5

3. 访问元素

复制代码
int a = v1[0];         // 不检查边界
int b = v1.at(1);      // 检查边界,越界抛出异常
int c = v1.front();    // 第一个元素
int d = v1.back();     // 最后一个元素

4. 删除元素

复制代码
v1.pop_back();         // 删除最后一个元素
v1.erase(v1.begin());  // 删除第一个元素
v1.erase(v1.begin(), v1.begin()+2); // 删除前两个元素
v1.clear();            // 清空所有元素

5. 容量和大小

复制代码
int size = v1.size();      // 元素数量
bool empty = v1.empty();   // 是否为空
v1.resize(10);             // 调整大小
int cap = v1.capacity();   // 当前分配的存储容量
v1.reserve(100);           // 预留空间

常用方法

遍历vector

复制代码
// 使用下标
for (size_t i = 0; i < v1.size(); ++i) {
    cout << v1[i] << " ";
}

// 使用迭代器
for (auto it = v1.begin(); it != v1.end(); ++it) {
    cout << *it << " ";
}

// 范围for循环(C++11)
for (int num : v1) {
    cout << num << " ";
}

排序

复制代码
#include <algorithm>
sort(v1.begin(), v1.end()); // 升序
sort(v1.rbegin(), v1.rend()); // 降序

查找

复制代码
auto it = find(v1.begin(), v1.end(), 10);
if (it != v1.end()) {
    // 找到元素
}

高级用法

二维vector

复制代码
vector<vector<int>> matrix(3, vector<int>(4)); // 3行4列矩阵
matrix[0][1] = 5; // 访问元素

交换两个vector

复制代码
vector<int> v6 = {1, 2, 3};
vector<int> v7 = {4, 5, 6};
v6.swap(v7); // 交换内容

移动语义(C++11)

复制代码
vector<int> v8 = std::move(v7); // 移动而非拷贝

性能提示

  1. 预先使用reserve()可以减少动态内存分配次数

  2. emplace_back()比push_back()更高效

  3. 删除中间元素会导致后续元素移动,效率较低

vector<int> 是C++中最常用的容器之一,提供了动态数组的功能,同时保持了高效的随机访问能力。

相关推荐
w_zero_one2 小时前
算法--模拟
java·数据结构·算法
秋天的怀念_David2 小时前
算法一千零一夜 · 第十三夜 幻方,武侠世界里的数学迷宫
java·程序人生·算法
·present·3 小时前
CSAPP(lecture 4_01)
c语言·c++
FPGA小迷弟3 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
c++·python·ai·plotly·django·ai编程·claude
秋天的怀念_David3 小时前
算法一千零一夜 · 第十四夜 幻方与奇妙的二进制
java·程序人生·算法
薛定e的猫咪3 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
程序员-King.3 小时前
【ROS1】Noetic 开发工作流程与常用命令
c++·ubuntu·ros
云深麋鹿3 小时前
C++ | 基于红黑树实现mymap与myset
开发语言·c++
薛定e的猫咪3 小时前
(ICLR 2026)DF-META:面向 FJSP 的无导数元学习实例自适应调度
人工智能·深度学习·学习·算法·机器学习
傲世仙尊5 小时前
string增删查改-insert-erase-replace与find加substr组合技
c++