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

【C++语法】【STL】“for ( auto c : str )”类型的循环

一、for ( auto &c : str ) 和 for ( auto c : str )

for (auto &c : line) 
{
    // 对 c 进行操作
}

语法解析

注:★★★c不用事先定义!

auto &c

  • auto:自动推导 c 的类型(char,如果 linestd::string)。
  • &c引用,表示 c 直接绑定到 line 的字符上,可以修改 line 里的字符。

line

  • 一个 std::string其他支持范围遍历的容器(如 vector<int>)。
  • c 依次代表 line 里的每个元素。

典型实例

示例 1:遍历字符串并修改

#include <iostream>
#include <string>

int main() 
{
    std::string line = "hello";

    // 将字符串里的小写字母改成大写
    for (auto &c : line)
    { 
        c = toupper(c);
    }

    std::cout << line << std::endl; // 输出:HELLO
    return 0;
}

 &c 绑定到 line 的字符上,所以 c = toupper(c); 直接修改line 里的字符。

示例 2:不使用 &,无法修改

#include <iostream>
#include <string>

int main() 
{
    std::string line = "hello";

    for (auto c : line) 
    {
        // 这里 c 是字符的副本,修改不会影响原字符串
        c = toupper(c);
    }

    std::cout << line << std::endl; // 仍然输出:hello
    return 0;
}

c 只是 line 字符的一个 拷贝,对 c 的修改不会影响 line 本身。

示例 3:遍历 vector<int>

#include <iostream>
#include <vector>

int main() {
    std::vector<int> nums = {1, 2, 3, 4, 5};

    for (auto &n : nums) { // 这里 n 是 nums 的引用
        n *= 2; // 每个元素乘 2
    }

    for (auto n : nums) {
        std::cout << n << " "; // 输出:2 4 6 8 10
    }

    return 0;
}

&nn 直接修改 nums 里的元素。

如果 for (auto n : nums) 没有 &,修改只会作用在 n 的拷贝上,nums 本身不会变。

总结

  • for (auto &c : line) 遍历并修改 line 的字符。
  • for (auto c : line) 只会拷贝字符,无法修改原字符串。
  • 适用于 std::stringvectorarrayset 等支持 begin()end() 迭代的容器

二、for ( char &c : line ) 和 for ( char c : line )

该类型的c的数据类型为手动指定的,其余使用方法和原理与上一种类型相同,但是还是附上两个例子吧:

string line="Hello";
//例一:
for (char &c : line) 
{
    // 明确声明 c 是 char&
    c = toupper(c);
}
std::cout << line << std::endl;//输出"HELLO"
//例二:
for (auto c : line) 
{ 
    // 这里 c 不是引用,而是字符的副本
    c = toupper(c);   // 只是修改了副本,不影响原字符串
}
std::cout << line << std::endl; // 仍然是 "Hello"

终极大总结:

写法是否修改 line说明
for (auto c : line)❌ 不会c 是拷贝,修改它不会影响 line
for (auto &c : line)✅ 会c 是引用,修改它会改变 line
for (char c : line)❌ 不会c 是拷贝,和 auto c 一样
for (char &c : line)✅ 会c 是引用,和 auto &c 一样

http://www.kler.cn/a/538134.html

相关文章:

  • windows生成SSL的PFX格式证书
  • Vue3 Ref全家桶详解:从入门到实战
  • FFmpeg(一) 简介
  • ASP.NET Core JWT Version
  • 第1章 特征工程
  • 青少年编程与数学 02-009 Django 5 Web 编程 03课题、项目结构
  • FreeRtos实时系统: 九.FreeRTOS的时间管理
  • 【学Rust写CAD】5 三维转换矩阵解析及应用示例
  • 【ARM】MDK烧录配置文件无权限访问
  • 12.13 LangChain 运行时引擎解析:AgentExecutor vs PlanAndExecute vs AutoGPT
  • 三天急速通关MyBatis
  • c语言样式主题 清爽风格 代码色彩 keil风格 适合单片机开发GD32 STM32等 cursor或者vscode 的settings.json文件
  • Python第三方库复制到另一台电脑保持安装环境一致
  • 【RK3588嵌入式图形编程】-SDL2-创建应用事件循环
  • 【DeepSeek-01】无需 Docker,千元级电脑本地部署 Ollama + DeepSeek-R1:14b + Chatbox
  • stm32蓝牙模块
  • 【Pytorch实战教程】让数据飞轮转起来:PyTorch Dataset与Dataloader深度指南
  • Linux网卡配置方法
  • 02为什么 OD门和 OC门输出必须加上拉电阻?
  • 机器学习-关于线性回归的表示方式和矩阵的基本运算规则
  • 【STM32F1】一种使用通用定时器实现各个通道独立输出不同指定数量脉冲的方法
  • 掌握内容中台与人工智能技术的新闻和应用场景分析
  • vue的响应式原理以及Vue 3.0在响应式原理上的优化方案
  • Blocked aria-hidden on an element because its descendant retained focus.
  • CASAIM与马来西亚 Perodua汽车达成合作,共推汽车制造质量升级
  • 【C++八股】const和define的区别