news 2026/6/11 2:21:28

STL——vector

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STL——vector

写这篇文章主要是为了记录vector的一些用法,之前一直没有过系统的记录,导致自己老是忘记

遍历

1、下标遍历

#include <bits/stdc++.h> using namespace std; int main() { vector<int> a = {1, 2, 3, 4, 5}; // 下标遍历 for (int i = 0; i < a.size(); i++) { cout << a[i] << " "; } return 0; } // 输出:1 2 3 4 5

2、迭代器遍历

//c++ 11以上 vector<int> a = {1, 2, 3, 4, 5}; // 范围for遍历(只读) for (auto num : a) { cout << num << " "; } // 如需修改元素,用引用 for (auto &num : a) { num *= 2; // 所有元素乘2,a变为{2,4,6,8,10} }

3、反向遍历

// C++11+ for (auto it = a.rbegin(); it != a.rend(); it++) { cout << *it << " "; }

4、特定位置开始遍历

vector<int> a = {1, 2, 3, 4, 5}; int start = 2; // 从下标2(第三个元素)开始遍历 for (int i = start; i < a.size(); i++) { cout << a[i] << " "; // 输出:3 4 5 } // 场景1:从下标2开始,遍历到末尾 for (auto it = a.begin() + 2; it != a.end(); it++) { cout << *it << " "; // 输出:3 4 5 } // 场景2:遍历下标1到3(左闭右开,即1、2、3) for (auto it = a.begin() + 1; it != a.begin() + 4; it++) { cout << *it << " "; // 输出:2 3 4 } // 场景3:反向遍历最后3个元素 for (auto it = a.rbegin(); it != a.rbegin() + 3; it++) { cout << *it << " "; // 输出:5 4 3 }

5、遍历矩阵

#include <bits/stdc++.h> using namespace std; int main() { vector<vector<int>> mat = {{1, 2}, {3, 4}, {5, 6}}; // 外层:遍历每一行(row是当前行的vector<int>) for (auto& row : mat) { // 用引用&避免拷贝,提升效率 // 内层:遍历当前行的每个元素 for (auto num : row) { cout << num << " "; } cout << endl; } return 0; }

赋值

1、初始化

// 初始化时赋值多个元素 vector<int> a = {1, 2, 3, 4, 5}; // C++11支持 vector<string> b{"apple", "banana", "orange"}; // 初始化长度为5,所有元素为0 vector<int> a(5, 0); // 初始化长度为3,所有元素为9 vector<int> b(3, 9);

2、拷贝

vector<int> a = {1, 2, 3}; vector<int> b; // 将a的所有值拷贝给b,b变为{1,2,3} b = a; // 覆盖赋值:b原有值被替换为{4,5} b = {4, 5};

3、assign

vector<int> a; // 先赋值5个8,a变为{8,8,8,8,8} a.assign(5, 8); // 覆盖原有值,赋值3个6,a变为{6,6,6} a.assign(3, 6); // 输出:6 6 6 vector<int> a = {1, 2, 3, 4, 5}; vector<int> b; // 赋值a的全部区间(begin()到end()),b变为{1,2,3,4,5} b.assign(a.begin(), a.end()); vector<int> c; // 赋值a的下标1到3的区间(左闭右开),c变为{2,3,4} c.assign(a.begin() + 1, a.begin() + 4); // 数组转vector int arr[] = {10, 20, 30}; vector<int> d; // 赋值数组的全部元素,d变为{10,20,30} d.assign(arr, arr + sizeof(arr)/sizeof(int));

4、fill(修改特定区间的值为特定)

vector<int> a = {1,2,3,4,5}; int k = 2; fill(a.end() - k, a.end(), 0); // 最后2个元素改为0 // 输出:1 2 3 0 0 vector<int> a = {1,2,3,4,5}; int k = 3; fill(a.begin(), a.begin() + k, 8); // 前3个元素改为8 // 输出:8 8 8 4 5 vector<int> a = {1,2,3,4,5}; // 修改倒数第3个到倒数第1个元素为7 fill(a.rbegin() + 1, a.rbegin() + 4, 7); // 输出:1 7 7 7 5

注意:fill的区间是左闭右开

某个特定元素出现的个数

#include <bits/stdc++.h> using namespace std; int main() { vector<int> a = {1, 2, 3, 2, 2, 4, 5, 2}; int target = 2; // 要统计的目标元素 // 统计整个vector中target的个数 int cnt = count(a.begin(), a.end(), target); cout << "元素 " << target << " 出现的次数:" << cnt << endl; // 输出:4 return 0; }

求和

#include <bits/stdc++.h> // 注意:accumulate属于<numeric>头文件,bits/stdc++.h已包含 using namespace std; int main() { vector<int> a = {1, 2, 3, 4, 5}; // 核心语法:accumulate(起始迭代器, 结束迭代器, 初始值) int sum = accumulate(a.begin(), a.end(), 0); // 初始值0(和元素类型一致) // 浮点型示例 vector<double> b = {1.5, 2.5, 3.0}; double sum_d = accumulate(b.begin(), b.end(), 0.0); // 初始值用0.0,避免精度丢失 cout << "int总和:" << sum << endl; // 输出:15 cout << "double总和:" << sum_d << endl; // 输出:7.0 return 0; } // (自定义)累加元素的平方和:1²+2²+3²+4²+5²=55 int sum_sq = accumulate(a.begin(), a.end(), 0, [](int total, int num) { return total + num * num; }); // 指定区间求和 vector<int> a = {1, 2, 3, 4, 5}; // 求和下标1到3(左闭右开)的元素:2+3+4=9 int sum = accumulate(a.begin() + 1, a.begin() + 4, 0); cout << "区间总和:" << sum << endl; // 输出:9

查找元素find

#include <bits/stdc++.h> using namespace std; int main() { vector<int> a = {10, 20, 30, 20, 40}; int target = 20; // 核心语法:find(起始迭代器, 结束迭代器, 目标元素) auto it = find(a.begin(), a.end(), target); // 判断是否找到:迭代器不等于end()即为找到 if (it != a.end()) { // 迭代器转下标:it - a.begin() cout << "元素 " << target << " 存在,第一个位置:" << it - a.begin() << endl; // 输出:1 } else { cout << "元素 " << target << " 不存在" << endl; } return 0; }

求最大值最小值

#include <bits/stdc++.h> using namespace std; int main() { vector<int> nums = {3, 1, 4, 1, 5, 9, 2, 6}; if (nums.empty()) { cout << "vector为空" << endl; return 0; } // 核心语法:min_element(起始迭代器, 结束迭代器) auto min_it = min_element(nums.begin(), nums.end()); auto max_it = max_element(nums.begin(), nums.end()); // 迭代器解引用获取值 int min_val = *min_it; int max_val = *max_it; cout << "最小值:" << min_val << endl; // 输出:1 cout << "最大值:" << max_val << endl; // 输出:9 return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 19:55:04

计算机Java毕设实战-基于微服务教材征订系统基于SpringBoot+vue的教材管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/10 18:03:33

别让观望耽误商机:CES Asia 2026参展企业复盘显示提前布局回报率达300%

2025年12月25日消息&#xff0c;当多数企业还在犹豫观望时&#xff0c;往届参展商的实战数据早已给出明确答案&#xff1a;提前布局CES Asia的企业&#xff0c;平均投资回报率高达300%。从自动驾驶公司的亿元级合作到初创企业的超额融资&#xff0c;从现象级媒体曝光到渠道网络…

作者头像 李华
网站建设 2026/6/10 19:01:38

第P3周:Pytorch实现天气识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 目录 一、 前期准备 1. 设置GPU 2. 导入数据 3. 显示图片 4. 划分数据集 二、构建简单的CNN网络 三、 训练模型 1. 设置超参数 2. 编写训练函数 3. …

作者头像 李华
网站建设 2026/6/10 19:46:17

学术圈公认最好用的十大降ai率产品全测评

家人们&#xff0c;现在学校查得是真严&#xff0c;不仅重复率&#xff0c;还得降ai率&#xff0c;学校规定必须得20%以下... 折腾了半个月&#xff0c;终于把市面上各类方法试了个遍&#xff0c;坑踩了不少&#xff0c;智商税也交了。今天这就把这份十大降AI工具合集掏心窝子…

作者头像 李华
网站建设 2026/6/10 20:01:34

企业数据API对接稳定性挑战与高可用架构实践指南

在数字化转型浪潮席卷全球的今天&#xff0c;企业数据API&#xff08;Application Programming Interface&#xff09;已成为连接内部系统、第三方服务与合作伙伴生态的核心纽带。然而&#xff0c;随着API调用量的指数级增长&#xff0c;企业面临着严峻的技术挑战&#xff1a;A…

作者头像 李华
网站建设 2026/6/9 18:52:37

通信协议仿真:5G NR协议仿真_(12).5G NR仿真中的移动性管理

5G NR仿真中的移动性管理 1. 移动性管理概述 移动性管理是5G NR&#xff08;New Radio&#xff09;协议中的一个重要组成部分&#xff0c;它确保用户在移动过程中能够保持无缝的连接和服务质量。移动性管理涉及多个方面&#xff0c;包括小区选择与重选、切换、重定向、连接恢复…

作者头像 李华