当前位置: 首页 > ds >正文

for(auto it: vec)和for(auto it: vec)的区别以及使用场景

目录

1.for(auto it: vec)

2.for(auto& it: vec)

3.总结


        在 C++ 里,for(auto it: vec) 和 for(auto& it: vec) 都属于基于范围的 for 循环,可用于遍历容器(像 std::vectorstd::list 等)或者数组。不过,它们在语义与使用场景上存在差异。

1.for(auto it: vec)

        这种形式的循环会对容器 vec 里的每个元素进行遍历,并且把元素的值复制给变量 it。这里的 auto 是 C++ 的类型推导关键字,它会依据容器元素的类型自动推导出 it 的类型。

        示例代码:

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};for (auto it : vec) {std::cout << it << " ";}std::cout << std::endl;return 0;
}

使用场景

  • 当你只是想要读取容器元素的值,而不需要修改容器元素时,可以使用这种形式。
  • 由于每次循环都会复制元素,所以如果容器元素是大对象(如大型结构体或类对象),可能会带来一定的性能开销。

2.for(auto& it: vec)

        这种形式的循环同样会遍历容器 vec 中的每个元素,但不同的是,it 是元素的引用。也就是说,it 直接引用了容器中的元素,而不是复制元素的值。

        示例代码:

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};for (auto& it : vec) {it *= 2; // 修改元素的值}for (auto it : vec) {std::cout << it << " ";}std::cout << std::endl;return 0;
}

使用场景

  • 当你需要修改容器中的元素时,必须使用这种形式,因为只有通过引用才能直接修改容器元素的值。
  • 对于大对象容器,使用引用可以避免复制带来的性能开销。

3.总结

  • for(auto it: vec) 适用于只需要读取容器元素值的场景,会复制元素的值,可能存在性能开销。
  • for(auto& it: vec) 适用于需要修改容器元素值的场景,通过引用直接操作容器元素,避免了复制开销。

此外,若你不希望修改元素,同时又想避免复制大对象带来的开销,可以使用

for(const auto& it: vec){}

 

for (auto& it: std::add_const_t<decltype(vec)>(vec)){}

for (auto& it: qAsConst(vec)){}

这样 it 是元素的常量引用,既能避免复制,又能防止意外修改元素。

http://www.xdnf.cn/news/2898.html

相关文章:

  • Java—— Arrays工具类及Lambda表达式
  • 联合体union的特殊之处
  • 软件测试实验报告3 | 自动化测试工具的基本操作
  • 局域网传文件——基于flask实现
  • 9.Three.js中 ArrayCamera 多视角相机详解+示例代码
  • RISCV学习(5)GD32VF103 MCU架构了解
  • 修改Hosts文件没有生效的解决办法
  • LM393比较器的比较翻转电压不对
  • seaborn数据统计可视化-介绍
  • 需要掌握的前端安全概念以及实操
  • 【React Native】精通 react native
  • 第十四届蓝桥杯Scratch03月stema选拔赛——九九乘法表
  • 城市群出行需求的时空分形
  • 工厂设计模式
  • GRPO vs SFT:强化学习提升大模型多模态推理泛化能力的原因研究
  • 2.2.1goweb内置的 HTTP 处理程序
  • Daytona - 开源开发环境管理器
  • 【前端】CSS实现div双背景图叠加
  • QTableView复选框居中
  • Java多线程入门案例详解:继承Thread类实现线程
  • 将本地Springboot项目部署到Linux服务器
  • Web开发之三层架构
  • 从困局到破局的AI+数据分析
  • vscode以管理员身份运行报错
  • 用 Python打造交互式图片-音视频管理器:代码分析与实践
  • 厚铜pcb生产厂家哪家好?
  • 深入解析C2服务器:网络攻击的核心枢纽
  • 莫队算法学习笔记
  • Spring-全面详解(学习总结)
  • 具身智能机器人的应用场景及最新进展