码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • for(auto count : counts)


    c++中 for(auto count : counts)

    auto是声明自动变量格式为for(元素类型 遍历值:数组/容器),之所以用auto是可以根据赋值自动推导出变量类型。

    auto是c++程序设计语言的关键字。用于两种情况

    (1)声明变量时根据初始化表达式自动推断该变量的类型

    (2)声明函数时函数返回值的占位符

    意思是将 counts 容器中的每一个元素从前往后枚举出来,并用 count 来表示,类似于Java中的 for each 语句:

     1 #include<iostream>
     2 #include<vector>
     3 using namespace std;
     4 int main() {
     5     int a[] = { 1,2,3,5,2,0 };
     6     vector<int>counts(a,a+6);
     7     for (auto count : counts)
     8         cout<< count<< " ";
     9     cout << endl;
    10     return 0;
    11 }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    运行的效果是:

    在这里插入图片描述

    这是C++11中的语法,即:Range-based for loop。其中counts应满足:begin(counts),end(counts)是合法的。

    因此,它等价于for(some_iterator p = begin(counts); p != end(counts);
    ++p)且some_type count = *p。

    for(auto x : range)
    创建拷贝,无法修改range中的元素

    for(auto& x : range)
    可以修改range中的元素

    下面是一个例子:

    c++11的特性,v是一个可遍历的容器或流,比如vector类型,i就用来在遍历过程中获得容器里的每一个元素。

    for(auto i:v)
    for(auto &i:v)
    
    • 1
    • 2

    代码1:for(auto &i:v)

    #include
    #include
    using namespace std;
    string s = "hello";
    for (auto &i : s ) //i是个引用 
    i = toupper(i); //改变成大写,影响s的值
    cout<<s<<endl; //s的值是 HELLO
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    代码2:for(auto i:v)

    #include
    #include
    using namespace std;
    string s = "hello";
    for (auto i : s ) //i 是char类型
    i = toupper(i); //改变成大写,不影响s的值
    cout<<s<<endl; //s的值是 hello
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    for(auto&& count: counts),其与for(auto& count:counts)的区别在于auto的推导是否受初始化值的影响。

    auto&& 的推导收到初始化值的 value category 的影响。用左值初始化,推导得结果是一个左值引用;否则是一个右值引用。

    auto& 的推导与初始化值的 value category 无关。

    官网解释:

    在这里插入图片描述
    以上语法生成的代码等效于以下代码(_ _ range、 _ _ start 和 _ _ end 仅用于公开) :
    在这里插入图片描述

  • 相关阅读:
    n个不同元素进栈,求出栈元素的【不同排列】以及【排列的数量】?
    YOLOv5识别图像内苹果和香蕉
    云渲染比本地电脑渲染快多少?一个案例生动告诉你云渲染的速度优势
    java项目-第90期基于ssm的嘟嘟二手书商城系统
    自然科学领域期刊分区——什么是核心期刊(核心A、B、C)
    大专学历,33岁宝妈又怎样?我照样销售转测试,月入13k+
    一分钟每日科技速递 2022/08/14
    软件开发三大痛点!小程序容器如何解决?
    LDAP注入漏洞
    与归并排序相关的一些问题
  • 原文地址:https://blog.csdn.net/qq_40713201/article/details/126564757
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号