news 2026/5/25 13:09:55

【C++修仙录02】筑基篇:vector 使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【C++修仙录02】筑基篇:vector 使用

嗨~大家好,这里是春栀怡铃声的博客~

“做你害怕的事,然后发现,不过如此~”

目录

创建vector

遍历方法

迭代器

reserve 扩容

resize 对size 进行改变 会加值,会减值

insert

size

capacity

empty

push_back

erase

swap

clear


创建vector

vector<int>v2(10, 2); vector<int> v1; vector<int>v3(++v2.begin(), --v2.end()); //迭代器创建

遍历方法

范围for由2部分组成,冒号前面是范围内用于迭代的变量,第二变量则表示被迭代的范围

自动读取数据,自动结束

vector<int>v3(10,2); for (auto e : v3) { cout << e<<" "; } cout << endl;

下标访问

//下标访问 for (size_t i = 0; i < v3.size(); i++) { cout << v3[i]<<" "; } cout << endl;

迭代器

vector 的迭代器可以理解成“指向元素的通用指针”,用来遍历和操作容器里的元素。

常用接口

vector<int> v (10,2);

auto it = v.begin(); // 指向第一个元素
auto ed = v.end(); // 指向最后一个元素的后一个位置

遍历

for (auto it = v.begin(); it != v.end(); ++it) {
cout << *it << ' ';
}

常见特性

- *it 取值
- ++it 前进
- it + n、it - n:因为 vector 的迭代器是随机访问迭代器
- it1 < it2:可比较位置先后
- it[n]:等价于 *(it + n)

只读迭代器

vector<int>::const_iterator cit = v.cbegin();

const_iterator 不能修改元素。

反向迭代器

for (auto it = v.rbegin(); it != v.rend(); ++it) { std::cout << *it << ' '; }

迭代器遍历

//迭代器遍历 vector<int>::iterator it = v3.begin(); //auto it=v3.begin(); while (it != v3.end()) { cout << *it<<" "; ++it; } cout << endl;

reserve 扩容

提前开好空间

像下面的示例:创建了string 类 的tmp ,想让tmp 拥有和s1一样大的空间存放数据

使用reserve 开出空间

a. reserve(n) && n<capacity

在vector 中明确不会缩容;

在string (gcc) 会缩容,string(vs.2022) 不会缩容

vector<int>v(10, 2); v.reserve(5); cout << v.size() << endl; cout << v.capacity() << endl; v.reserve(20); cout << v.size() << endl; cout << v.capacity() << endl;

初始有效数据有10个,空间大小也为10

第一次reserve(5) 5<10 ,无需扩容,并且不会缩小空间大小 空间大小和有效数据都不变

第二次reserve(20) 需要扩容,空间大小变为20,有效数据不变

resize 对size 进行改变 会加值,会减值

vector<int>v(10, 2); v.resize(5); cout << v.size() << endl; cout << v.capacity() << endl; v.resize(15,6); cout << v.size() << endl; cout << v.capacity() << endl; v.resize(20, 3); cout << v.size() << endl; cout << v.capacity() << endl;

初始位置有效数据有10个,空间大小为10

经过第一次resize(5) 有效数据缩减到5,空间大小不变

第二次resize(15,6) 有效数据加到15,空间也扩大到15,新增的有效数据都是6

第三次 resize(20,3) 有效数据加到20,空间扩容到22, 新增的有效数据都是3

insert

insert 只能传迭代器

第一个参数代表指向位置插入,第二个参数代表插入的值

void text_vector5() { vector<int>v(10, 2); v.insert(v.begin(), 4); v.insert(v.begin() + 3, 6); //可以通过迭代器加来进行随机位置插入 for (auto e : v) { cout << e << " "; } cout << endl; }

size


返回的是v1的有效数据个数

使用

v1.size();

capacity


返回的是v1的空间大小

v1.capacity();

empty


返回v1是否为空的判断值,是空返回true ,不是空返回false

push_back


使用push_back 在v1末尾插入

vector<int>v1; v1.push_back(5);

erase

erase 只能传迭代器

一种用法是直接删除传入迭代器指向的位置的值

另一种是删除第一个迭代器到第二个迭代器的范围中的值

vector<int>v1(10,2); v1.erase(v1.begin()); for (auto e : v1) { cout << e<<" "; } cout << endl; v1.erase(--v1.end()); for (auto e : v1) { cout << e<<" "; } cout << endl;

swap

• vector 的 swap 用来交换两个 vector 的内容,时间复杂度通常是 O(1)。

用法

#include <iostream> #include <vector> using namespace std; int main() { vector<int> a = {1, 2, 3}; vector<int> b = {4, 5}; a.swap(b); for (int x : a) cout << x << " "; // 4 5 cout << endl; for (int x : b) cout << x << " "; // 1 2 3 cout << endl; }

交换后:

- a 变成原来 b 的内容
- b 变成原来 a 的内容

包括:

- 元素内容
- size()
- capacity()

clear

只删除v1中的数据,v1的空间大小不变

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 13:09:14

2.6 程序控制语句

1. Java程序控制语句分为3类&#xff1a;选择&#xff08;分支&#xff09;、循环和跳转&#xff0c;可改变程序执行路径&#xff0c;实现非线性运行方式。2. 2.6.1 if语句1. if语句是Java的条件分支语句&#xff0c;可将程序执行路径分为两条。2. if语句中condition为返回布尔…

作者头像 李华
网站建设 2026/5/25 13:07:01

开源手术革命:OpenCLAW微创手术器械深度解析

开源手术革命&#xff1a;OpenCLAW微创手术器械深度解析 引言 在精准医疗与智能外科的时代浪潮下&#xff0c;开源技术正以前所未有的姿态切入高端医疗设备领域。传统手术机器人&#xff08;如达芬奇系统&#xff09;虽性能卓越&#xff0c;但其封闭的生态和动辄千万的成本&a…

作者头像 李华
网站建设 2026/5/25 13:06:01

从零到一:163MusicLyrics跨平台歌词提取工具的完整使用指南

从零到一&#xff1a;163MusicLyrics跨平台歌词提取工具的完整使用指南 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 想象一下&#xff0c;你刚刚发现一首好听的歌曲&a…

作者头像 李华
网站建设 2026/5/25 13:04:03

我把 Obsidian 同步换成 Nutstore Sync:省掉 WebDAV,手机也终于顺了

Obsidian 很好用&#xff0c;但同步一直是我最头疼的部分&#xff1a;官方同步有成本&#xff0c;WebDAV 配起来麻烦&#xff0c;跨设备改同一篇笔记还担心冲突。最近换成「坚果云 x Obsidian 官方同步插件」Nutstore Sync&#xff0c;用下来最大的感受是&#xff1a;步骤少了&…

作者头像 李华
网站建设 2026/5/25 13:03:05

5分钟快速部署i茅台自动化预约系统:免费开源的全能解决方案

5分钟快速部署i茅台自动化预约系统&#xff1a;免费开源的全能解决方案 【免费下载链接】campus-imaotai i茅台app自动预约&#xff0c;每日自动预约&#xff0c;支持docker一键部署&#xff08;本项目不提供成品&#xff0c;使用的是已淘汰的算法&#xff09; 项目地址: htt…

作者头像 李华
网站建设 2026/5/25 13:01:33

初创公司如何借助 Taotoken 的 Token Plan 套餐优化 AI 研发成本结构

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 初创公司如何借助 Taotoken 的 Token Plan 套餐优化 AI 研发成本结构 对于初创公司而言&#xff0c;在 AI 产品研发的初期阶段&…

作者头像 李华