vector的用法

我是学C语言的,本以为c++的vector只能创建数组,但现在才发现他还是太全面了。

他的功能:

在C++中,std::vector 是一个动态数组容器,提供高效的随机访问和动态扩容功能。

1. 头文件

cpp 复制代码
#include <vector>
#include <iostream>
#include <algorithm> // 用于sort等算法
using namespace std;

2. 初始化与声明

cpp 复制代码
// 空向量
vector<int> v1;

// 指定大小(5个元素,默认值0)
vector<int> v2(5);

// 指定大小和初始值(5个元素,值-1)
vector<int> v3(5, -1);

// 列表初始化
vector<int> v4 = {1, 2, 3, 4, 5};

// 从数组初始化
int arr[] = {10, 20, 30};
vector<int> v5(arr, arr + sizeof(arr)/sizeof(int));

// 复制构造
vector<int> v6(v4);

3. 元素访问

cpp 复制代码
vector<int> v = {10, 20, 30};

// 下标访问(不检查边界)
int a = v[1];  // a=20

// 安全访问(边界检查,越界抛异常)
int b = v.at(2); // b=30

// 首尾元素
int front = v.front(); // 10
int back = v.back();   // 30

// 数据指针(C风格交互)
int* p = v.data(); // 指向首元素

4. 容量操作

cpp 复制代码
vector<int> v = {1, 2, 3};

v.empty();    // 是否为空 → false
v.size();     // 元素数量 → 3
v.capacity(); // 实际分配内存大小(>= size)

v.reserve(100); // 预分配100个元素内存
v.shrink_to_fit(); // 释放多余内存(C++11)

5. 修改操作

cpp 复制代码
vector<int> v = {10, 20};

// 尾部插入
v.push_back(30); // {10,20,30}

// 删除尾部
v.pop_back();    // {10,20}

// 指定位置插入(迭代器位置)
v.insert(v.begin() + 1, 15); // {10,15,20}

// 删除元素(迭代器位置)
v.erase(v.begin()); // {15,20}

// 清空向量
v.clear();

// 重置大小(多删少补默认值)
v.resize(5); // {0,0,0,0,0}

6. 迭代器遍历

cpp 复制代码
vector<int> v = {1, 3, 5};

// 正向迭代器遍历
for (auto it = v.begin(); it != v.end(); ++it) {
    cout << *it << " ";
}

// 反向迭代器遍历
for (auto rit = v.rbegin(); rit != v.rend(); ++rit) {
    cout << *rit << " ";
}

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

7. 高级操作

cpp 复制代码
// 交换两个向量
vector<int> v1 = {1, 2}, v2 = {3, 4};
v1.swap(v2); // v1={3,4}, v2={1,2}

// 比较操作(按字典序)
if (v1 == v2) { /*...*/ }

// 排序(需#include <algorithm>)
sort(v1.begin(), v1.end());

// 逆序
reverse(v1.begin(), v1.end());
相关推荐
森焱森1 小时前
APM与ChibiOS系统
c语言·单片机·算法·架构·无人机
★Orange★1 小时前
Linux Kernel kfifo 实现和巧妙设计
linux·运维·算法
尘世闲鱼1 小时前
解数独(C++版本)
开发语言·c++·算法·解数独
qqxhb1 小时前
零基础数据结构与算法——第四章:基础算法-排序(中)
数据结构·算法·排序算法·归并·快排·堆排
Y1nhl3 小时前
力扣_链表_python版本
开发语言·python·算法·leetcode·链表·职场和发展
qq_401700413 小时前
C语言中位运算以及获取低8位和高8位、高低位合并
c语言·开发语言·算法
CoovallyAIHub3 小时前
YOLO模型优化全攻略:从“准”到“快”,全靠这些招!
深度学习·算法·计算机视觉
闻缺陷则喜何志丹3 小时前
【BFS】 P10864 [HBCPC2024] Genshin Impact Startup Forbidden II|普及+
c++·算法·宽度优先·洛谷
MicroTech20253 小时前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法
今天背单词了吗9804 小时前
算法学习笔记:8.Bellman-Ford 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·后端·算法·最短路径问题