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++中最常用的容器之一,提供了动态数组的功能,同时保持了高效的随机访问能力。

相关推荐
澈2071 分钟前
堆排序:高效构建大顶堆实战
数据结构·算法·排序算法
chh56320 分钟前
C++--内存管理
java·c语言·c++·windows·学习·面试
Yungoal21 分钟前
C++ 标准模板库STL(Standard Template Library)
c++·哈希算法·散列表
我真不是小鱼24 分钟前
cpp刷题打卡记录27——无重复字符的最长子串 & 找到字符串中所有字母的异位词
数据结构·c++·算法·leetcode
XuecWu328 分钟前
原生多模态颠覆Scaling Law?解读语言“参数需求型”与视觉“数据需求型”核心差异
人工智能·深度学习·算法·计算机视觉·语言模型
We་ct28 分钟前
LeetCode 69. x 的平方根:两种解法详解
前端·javascript·算法·leetcode·typescript·平方
一直不明飞行30 分钟前
C++:string,写法s.find(‘@‘) != s.end()是否有问题
开发语言·c++·算法
Proxy_ZZ042 分钟前
打造自己的信道编码工具箱——Turbo、LDPC、极化码三合一
c语言·算法·信息与通信
wayz1144 分钟前
21天机器学习核心算法学习计划(量化方向)
学习·算法·机器学习
穿条秋裤到处跑1 小时前
每日一道leetcode(2026.04.09):区间乘法查询后的异或 II
算法·leetcode