C++利用auto对std::vector进行遍历时auto的类型

2023-05-16

先把结论摆在最前面,当使用for (auto& node:nodes)std::vector<xxx> nodes进行遍历时,auto定义的node其实是一个对nodes中对应元素的引用。 具体的探究过程请看下文。

利用auto对std::vector进行遍历

在C++11中,新添加了auto关键字,用该关键字可以方便快捷地对std::vector进行遍历,方式见如下例程。

#include <iostream>
#include <vector>

struct node{
    int id;
    int coor;
};

int main(void){
    std::vector<node> arr;
    node tmp;
    for (int i = 1; i<10 ; i++){    //随便放几个数到vector中
        tmp.id = i;
        arr.push_back(tmp);
    }
    
    for (auto& n:arr){
        std::cout<<n.id<<“ ”;
    }
    
    while (1){}
    return 0;
}

程序输出结果为

1 2 3 4 5 6 7 8 9

利用auto对vector遍历时,auto的类型

在利用auto对vector进行遍历时,其实生成了一个相应元素的引用,具体见如下代码。

#include <iostream>
#include <vector>

struct node{
    int id;
    int coor;
};

node& test(std::vector<node>& arr){
    for (auto& n:arr){
        std::cout<<"address 2 "<<&arr[0]<<std::endl;
        std::cout<<"address 3 "<<&n<<std::endl;
        return n;
    }
}

int main(void){
    std::vector<node> arr;
    node tmp;
    for (int i = 1; i<10 ; i++){    //随便放几个数到vector中
        tmp.id = i;
        arr.push_back(tmp);
    }

    for (auto& n:arr){
        std::cout<<n.id<<“ ”;
    }
    
    std::cout<<"address 1 "<<&arr[0]<<std::endl;
    node& abc = test(arr);
    std::cout<<abc.id<<std::endl;
    std::cout<<"address 4 "<<&abc<<std::endl;
    abc.id = 17;
    std::cout<<abc.id<<std::endl;
    std::cout<<arr[0].id<<std::endl;
  
    while (1){}
    return 0;
}

输出结果如下

1 2 3 4 5 6 7 8 9 address 1 0x55add4d13f30
address 2 0x55add4d13f30
address 3 0x55add4d13f30
1
address 4 0x55add4d13f30
17
17

根据结果可以看出,test函数中的n其实是一个node&类型的引用,并且该引用可以作为返回值,从而可以进行更多操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++利用auto对std::vector进行遍历时auto的类型 的相关文章

  • 查找向量中最接近的值

    我想要完成的是迭代双精度值向量并返回最接近的可能双精度值的向量位置 我对此有两个问题 当尝试使用以下命令查找向量中最接近的双精度值时lower bound 如果我输入 1 我只会收到非零的值 我不知道如何使用lower bound返回向量位
  • 连接每第 n 行

    我在矩阵中得到了一个数据集 如下所示 从 Excel 导入 matrix Cat1 1 2 3 4 Cat2 9 10 11 12 Cat3 17 18 19 20 Cat1 5 6 7 8 Cat2 13 14 15 16 Cat3 21
  • Octave/Matlab:向向量添加新元素

    有一个向量x我必须添加一个元素 newElem 有什么区别吗 x end 1 newElem and x x newElem x end 1 newElem更稳健一些 x x newElem 仅当x是行向量 如果它是列向量x x newEl
  • 将 uint64_t 转换为 std::string

    如何将 uint64 t 值传输到 std string 我需要构造包含该值的 std string 例如这样的事情 void genString uint64 t val std string str some code for str
  • 使用 numba 计算向量和矩阵中的行之间的余弦相似度

    找到了这个gist https gist github com FedericoV 0e7d6d8c8794a99a7a42使用 numba 快速计算余弦相似度 import numba numba jit target cpu nopyt
  • 是否可以将向量的一部分作为向量发送给函数? [复制]

    这个问题在这里已经有答案了 我想看看是否可以将向量的一部分传递给函数 以便它显示为函数的法线向量 更重要的是 我希望这可以在 O 1 的常数时间内完成 我不想迭代向量来创建一个新向量 事实上 我还希望在下面的示例中将新向量的大小更改为 40
  • 二维向量的迭代器

    如何为 2d 向量 向量的向量 创建迭代器 虽然你的问题是not非常清楚 我假设您的意思是 2D 向量表示向量的向量 vector lt vector
  • 正确别名向量

    我无法在其他地方找到答案 所以我想我只需要问这个 我正在尝试获取向量 其中存储 int 指针 的别名 如下所示 void conversion Engine ENGINES The Engine class has a vector of
  • XNA 2D 矢量角度 - 正确的计算方法是什么?

    在 2D 中的 XNA 中矢量角度的标准工作方式是什么 向右 0 度 向上 90 度 向左 180 度 向下 270 度 什么是 标准 实现 float VectortoAngle Vector2 vec and Vector2 Angle
  • 一个同时接受 std::vector 和 QVector 的函数模板?

    假设我有一个函数叫做loadData 它需要一个容器 填充数据 和一个 CSV 文件 我需要以下重载 loadData std vector
  • 为什么我收到 string does not name a type 错误?

    game cpp include
  • 添加到 std::vector 的中间

    有没有办法将值添加到 a 的中间vector在 C 中 假设我有 vector
  • 方案中的多维向量?

    我之前问过一个关于方案中数组的问题 结果它们被称为向量 但在其他方面基本上与您期望的相同 有没有一种简单的方法可以在 PLT 方案中处理多维 arrays 向量 出于我的目的 我想要一个名为make multid vector或者其他的东西
  • 从向量中删除向量::end

    当我使用时它工作正常吗 什么也不做 vector
  • 错误 C2039:“find”:不是“std”的成员

    我刚刚遇到一个奇怪的错误 它说 find 不是 std 的成员 错误 C2039 find 不是 std 的成员 错误 C3861 查找 未找到标识符 基本上 我想查找是否可以在向量中找到字符串 知道为什么会发生这种情况吗 代码帮助告诉我
  • 如何根据原始元素将向量中的元素替换为另一个元素[重复]

    这个问题在这里已经有答案了 请考虑以下程序 这是一个最小化的示例 所以不要纠结于我在这里尝试做的事情可以通过以下方式更好地实现 HashMap
  • 尝试将元素推入向量

    在头文件 我没有编写 中 已经定义了一个结构体 如下所示 struct MemoryMessage public boost counted base public FastAlloc explicit MemoryMessage Memo
  • c++11 中的 std::thread 问题

    我在尝试从标准模板库编译具有多线程的程序时遇到一些麻烦 当我尝试编译以下程序时 它返回一个晦涩的错误 include
  • 在 2D int 向量上使用 std::fill

    我试图将 2D 向量中所有元素的值设置为特定值 据我所知 不能像将 memset 用于数组那样将其用于向量 因此 我必须使用 std fill 将 2D 向量中的所有元素设置为特定值 但是 我知道如何对一维向量使用填充 如下所示 vecto
  • std::bind 重载解析

    下面的代码工作正常 include

随机推荐

  • VGG16训练RAF-DB

    使用VGG16对本地数据集RAF DB中的basic图片进行训练 xff0c 官方已经在图片命名时分好了train与test xff0c train和test的label在同一个txt文件里 xff0c 方便起见 xff0c 把这两种lab
  • CMake编译opencv(测试)

    WORKIGN FOR THE WOLF 单编译OpenCV来测试项目 项目名称 span class token operator span 自定义 span class token function project span span
  • 从零开始学习SLAM:openCV

    继续跟随 视觉SLAM十四讲 学习SLAM问题 xff0c 由于理论方面已经有一些研究 xff0c 主要缺乏的是在LINUX下的实战开发能力 xff0c 因而从代码开始分析入手 xff0c 同时对C 43 43 11进行回顾 1 openC
  • 对博士学位说永别

    来自王垠 xff1a http blog sina com cn s blog 5d90e82f0101atzr html 经过深思熟虑之后 xff0c 我决定再次 抛弃 我的博士学位 这是我第三次决定离开博士学位 xff0c 也应该是最后
  • python web开发——Django基于类的视图

    简介 视图是一个可调用对象 xff0c 可以接收一个请求然后返回一个响应 这个可调用对象不仅仅限于函数 xff0c Django 同时提供一些可以用作视图的类 它们允许你结构化你的视图并且利用继承和混合重用代码 后面我们将介绍一些用于简单任
  • 使用docker安装ubuntu镜像

    使用docker安装ubuntu镜像 查找Ubuntu镜像 docker search ubuntu 安装Ubuntu镜像 docker pull ubuntu 查看docker镜像 docker images 运行docker镜像 doc
  • Ubuntu安装kalibr

    Ubuntu安装kalibr错误集锦 一 安装过程 ros参考 xff1a https blog csdn net Mua111 article details 107513509 kalibr安装参考 xff1a https blog c
  • 树莓派4b ubuntu系统开启串口

    树莓派4b安装ubuntu server18后如何开启串口 xff1f 树莓派4b的引脚图如下 xff1a 其中GPIO14和GPIO15是硬件串口 因为我安装的不是Raspian系统 xff0c 因此无法用raspi config打开该串
  • 惯性导航原理(1):导航坐标系及相互转换

    一 导航坐标系转换 坐标系介绍1 惯性坐标系 xff08 地心惯性坐标系 xff09 i系2 地球坐标系 xff08 地心地固坐标系 xff09 e系3 WGS 84坐标系 xff08 常用 xff09 blh坐标系4 当地水平地理坐标系g
  • win7系统下安装Ubuntu20.04.5系统保姆级教程

    一 制作u盘启动盘 准备工作 xff1a 一个空的8G大小的u盘 43 ultraISO软件 43 ubuntu系统的镜像文件 1 下载并安装ultraISO软件 下载地址 xff1a 百度网盘 请输入提取码 提取码 xff1a jv6a
  • 手把手带你免费打嘉立创pcb板

    手把手带你免费打嘉立创pcb板 前言一 熟悉规则二 下单1 下载安装下单助手2 领劵 注意 前言 嘉立创的新规则 xff1a 上个月消费没有满20的话只支持立创EDA画的板子 一 熟悉规则 嘉立创的免费规则和板子工艺要求如下 xff0c 大
  • ADRC学习与参数整定心得

    ADRC xff0c 中文名是自抗扰控制技术 继承了经典PID控制器的精华 xff0c 对被控对象的数学模型几乎没有任何要求 xff0c 又在其基础上引入了基于现代控制理论的状态观测器技术 xff0c 将抗干扰技术融入到了传统PID控制当中
  • ArUco相关

    ArUco相关 ArUco xff0c 一个开源的微型的现实增强库 https blog csdn net bashendixie5 article details 113769010 Aruco码估计相机位姿初步 xff01 xff01
  • ArUco

    文章目录 一 ArUco简介二 Marker和字典三 步骤1 创建Marker xff08 Marker Creation xff09 2 检测Marker xff08 Marker Detection xff09 3 姿态估计 xff08
  • Python PIP升级后执行命令报错: sys.stderr.write(f“ERROR: {exc}“)解决方法

    近日在使用pip时终端始终提示 You are using pip version 8 1 1 however version 21 0 1 is available You should consider upgrading via th
  • 戴尔Optiplex-7080装ubuntu16.04双系统时遇到的一些坑

    目录 ubuntu16 04安装过程中遇到的坑安装教程安装类型为空 xff08 读取不到磁盘 xff09 ubuntu16 04安装完成后无法启动windows ubuntu16 04无法连接无线网络 ubuntu16 04安装过程中遇到的
  • Ubuntu 16.04无法检测双屏/nvidia-smi显示no running processing found/nvidia-settings读取不到显卡信息

    问题 xff1a 1 笔记本ubuntu 16 04系统无法检测双屏 xff0c xrandr不显示hdmi接口或hdmi disconnectted 2 nvidia smi的最下方显示No running processes found
  • C++中的智能指针:shared_ptr

    本文主要参考 std shared ptr C 43 43 shared ptr共享型智能指针详解 std shared ptr 是一种智能指针 xff0c 它能够记录多少个 shared ptr 共同指向一个对象 xff0c 从而消除显式
  • pixhawk4 mini重启后死机

    pixhawk4 mini通过供电口供电 xff0c telement1口连接数传 xff0c usb口连接树莓派 xff08 机载计算机 xff09 此时如果用QGC地面站数传发送reboot指令 xff0c pixhawk4 mini关
  • C++利用auto对std::vector进行遍历时auto的类型

    先把结论摆在最前面 xff0c 当使用for auto amp node nodes 对std vector lt xxx gt nodes进行遍历时 xff0c auto定义的node其实是一个对nodes中对应元素的引用 具体的探究过程