C++ auto与循环

C++ auto 的介绍

typeid(p).name();可以输出auto的类型

auto 是 C++11 引入的一个关键字,用于自动类型推导。编译器会根据初始化表达式的类型来自动推导 auto 变量的类型。

使用 auto 可以简化代码,减少重复书写类型名称的繁琐,并且当类型非常复杂或者难以书写时,auto 尤其有用。

以下是 auto 的一些基本用法和注意事项:

  1. 基本用法
auto x = 10;         // x 是 int 类型
auto y = 3.14; // y 是 double 类型
auto str = "hello"; // str 是 const char[6] 类型
  1. 复杂类型的推导
auto func = [](int a, int b) { return a + b; };  // func 是 lambda 表达式类型
  1. 引用类型的推导
int a = 10;
auto& ref = a; // ref 是 int& 类型,引用到变量 a
ref = 20; // 修改 ref,a 的值也会被修改
  1. const 类型的推导
const auto b = 20;  // b 是 const int 类型
  1. auto 与指针
auto ptr1 = &a;     // ptr1 是 int* 类型
auto ptr2 = new int(30); // ptr2 是 int* 类型
  1. auto 与模板
template<typename T>
void print(const T& value) {
auto copy = value; // 这里可以自动推导 copy 的类型
// ... 其他代码
}
  1. auto 与解构
std::pair<int, double> p = {1, 3.14};
auto first = p.first; // first 是 int 类型
auto second = p.second; // second 是 double 类型
  1. auto 与 C++14 的 decltype 推导

    在 C++14 中,你可以使用 decltype(auto) 来得到更加精确的推导结果。
decltype(auto) f() {
return std::make_pair(1, 3.14); // 返回类型是 std::pair<int, double>
}

注意事项:

  • 使用 auto 时,初始化表达式必须是有效的,因为编译器需要根据它来推导类型。
  • auto 不能用于函数参数的类型推导,因为函数参数的类型必须在编译时就确定。
  • auto 也不能用于类的成员变量的类型推导。

总之,auto 关键字为 C++ 编程提供了更多的灵活性和便利性,特别是在处理复杂类型或模板编程时。

auto在循环中的使用

vector<int> pm;
//传统循环
for(int i=0;i<pm.size();++i)
std::cout<<pm[i]<<'\';
//第一种循环
for(auto v: pm)
std::cout<<v<<'\';
//第二种循环采用引用,速度会更快,避免无意义的拷贝
for(auto& v: pm)
std::cout<<v<<'\';
//第三种循环,为了避免引用的时候不小心修改到数组内容,使用const引用
for(const auto& v: pm)
std::cout<<v<<'\';

上面三种的输出结果都是一样的,而且和传统的相比,速度效率更快。

我们如果想要让自定义容器也实现(auto v:pm)这种效果,我们需要在class中添加这些内容:

class MyVector{
public:
using GroupType = std::vector<int> ;
GroupType::iterator begin(){return m_group.begin();}
GroupType::iterator end(){return m_group.end();} GroupType m_group;
};

只需要在class中添加一个begin和一个end函数即可。

这下即可使用:

MyVector m;
m.m_group.push_back(1);
m.m_group.push_back(2);
m.m_group.push_back(3);
m.m_group.push_back(4);
for(const auto& v:m)
std::cout<<v<<'\n';

C++ auto与循环的更多相关文章

  1. construction const parameter问题 构造函数const引用参数问题

    工程在window下编译没有任何问题, 但是在linux(CentOS6)下编译就老是报错 C++ 编译器已升级到最新版 6.1.0 错误如下: In file included /bits/stl_ ...

  2. C++_auto

    自动变量,自动获取类型,输出,泛型 自动变量,可以实现自动循环一维数组 自动循环的时候,对应的必须是常量 //auto自动变量,自动匹配类型 #include <iostream> usi ...

  3. UE4编码规范

    翻译原文为Unreal 的官方!自己看着总结了一下,不一定每条都能对上.不足之处,请多多不吝赐教! 原文地址:  unreal CodingStandard UE4编码规范 在Epic,有简单几条代码 ...

  4. C++中数组作为形参进行传递(转)

    有两种传递方法,一种是function(int a[]); 另一种是function(int *a) 这两种两种方法在函数中对数组参数的修改都会影响到实参本身的值! 对于第一种,根据之前所学,形参是实 ...

  5. C++中数组作为形参的方法

    转载:https://blog.csdn.net/qq_33374294/article/details/90769668 原链接:https://www.cnblogs.com/abella/p/1 ...

  6. Android Camera开发:周期性循环自动聚焦auto focus挂掉原因分析(preview is not enabled)

    参考:Android Camera开发:扫描二维码,周期性循环自动聚焦auto focus挂掉原因分析(preview is not enabled) 最近做Android人脸识别时,camera在自 ...

  7. C++中对C的扩展学习新增语法——For循环以及AUTO类型

    For循环以及AUTO类型 For代码实现: AUTO类型: 1.auto自动类型推导,省事. 2.auto主要在模板中用的多,模板的类型比较长,使用auto可以简化代码. 3.不要轻易使用,我们在编 ...

  8. 基于 range 的 for 循环和 auto

    基于 range 的 for 循环和 auto C++11 引入一种循环的新形式,叫基于 range 的 for 循环,它允许我们用更简单易读的形式遍历容器中的所有元素 vector<int&g ...

  9. C++ 遍历循环表达示 auto, auto&, auto&&

    for(auto x : range) 创建拷贝,无法修改range中的元素 for(auto& x : range) 可以修改range中的元素,但一般用以下这种 for(auto& ...

  10. 模仿Linux内核kfifo实现的循环缓存

    想实现个循环缓冲区(Circular Buffer),搜了些资料多数是基于循环队列的实现方式.使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了.偶然间看到分析Linux内核的循 ...

随机推荐

  1. sass中使用穿透属性(deep)修改第三方组件样似

    <el-form-item> <el-button class="save-btn" type="primary" @click=" ...

  2. vue 半场动画进入状态

    <style> .box{ width: 30px; height: 30px; border-radius: 50%; background: red; } </style> ...

  3. gRPC如何保障数据安全传输

    什么是 gRPC? gRPC 是由 Google 开发的高性能.开源的 RPC(Remote Procedure Call)框架,用于在客户端和服务器之间进行通信.它基于 Protocol Buffe ...

  4. 5.7 Windows驱动开发:取进程模块函数地址

    在笔者上一篇文章<内核取应用层模块基地址>中简单为大家介绍了如何通过遍历PLIST_ENTRY32链表的方式获取到32位应用程序中特定模块的基地址,由于是入门系列所以并没有封装实现太过于通 ...

  5. 19.4 Boost Asio 远程命令执行

    命令执行机制的实现与原生套接字通信一致,仅仅只是在调用时采用了Boost通用接口,在服务端中我们通过封装实现一个run_command函数,该函数用于发送一个字符串命令,并循环等待接收客户端返回的字符 ...

  6. ChatGPT 对接微信公众号技术方案实现!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 9天假期写了8天代码和10篇文章,这个5.1过的很爽! 如假期前小傅哥的计划一样,这个假期开启 ...

  7. How to 充分利用你的服务器

    服务器高性能计算指南 本文处于preview阶段,内容并不完全严谨,如有错误敬请原谅,适当参考. 目录 服务器高性能计算指南 什么样的计算适合当前服务器? 从CPU架构入手 两个CPU带来的影响 那么 ...

  8. vscode连不上云服务器,一直报超时错误|但是xshell那些又可以连上?为什么vscode连不上?|命令行输出管道报错 -bash: command not found 导致的一系列问题

    前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总https://blog.cs ...

  9. Leetcode刷题第七天-回溯-哈希

    332:重新岸炮行程 链接:332. 重新安排行程 - 力扣(LeetCode) 机场字典:{起飞机场:[到达机场的列表]} 去重:到达机场列表,i>0时,当前机场和上一个机场相等,contin ...

  10. 小知识:开启NTP服务并设置为开机启动

    我的一套测试环境发现时间慢了10分钟,影响我做各类测试. 首先就想到NTP服务,发现已安装NTP安装包,也有默认的NTP配置文件,只是没有启用. 用到的相关命令参考如下: [root@bogon ~] ...