从零开始一起学习SLAM | C++新特性要不要学?

时间:2021-07-22 14:27:16

LAM,C++编程是必备技能。不过,大家在学校里学习的书本一般比较老,主要还是C++98那些老一套。

本文所谓的C++新特性是指C++11及其以后的C++14、C++17增加的新关键字和新语法特性。其中C++11是C++98以来最重要的一次变化,而其后的C++14、C++17是在该基础上的完善和补充。

那么,问题来了,如果我不想学习新特性,还是像以前那样编程可以吗?

答案是:可以,不过这就像是别人已经在用铁制刀具切瓜了,你还在石器时代使用石头刀具,你说,效率能一样吗?

看看下面你心里就有答案了。

为何要学习新特性?

1、可以大幅度提高编程效率,切瓜更6

C++新特性增加了很多非常高效的关键字和语法,比如std::swap,C++11之前的swap执行了三次内存拷贝操作,这种不必要的内存操作会影响效率。而C++11之后的swap引入了右值引用和数据移动的概念,使用内存移管代替了不必要的内存拷贝,大大提高了效率。

2、省心省力,减少脱发

举个栗子。C++11之前如果我们要定义并初始化一个新变量,必须得知道其类型并定义,这在很多时候是非常繁琐的,比如迭代器的使用,而C++11之后引入了自动类型推导,一个auto解决一切,不需要关心类型,编译器会帮你自动推导出类型。

3、能看懂别人的代码,不被新时代抛弃

由于上述的优点,很多开源代码都是使用C++新特性,工作学习中大家也都使用新特性,如果你根本不了解这些新特性,估计很难看懂别人的代码,时代的战车会轰隆隆把你抛弃。

下面就列举几个比较典型的、经常使用的新特性,供大家入门。

常用的C++新特性

1、更方便的列表初始化

C++11前只有数组能使用初始化列表。而C++11后大部分类型都可以初始化列表,方便的很。如下所示。

从零开始一起学习SLAM | C++新特性要不要学?

2、省心省力的自动类型推导

C++11中引入了auto,可以用来进行自动类型推导,不用关心数据类型,编译器会帮你推导好,而且这种方式也不影响编译速度。

比如迭代器使用了自动类型推导后,感觉清爽多了,如下图所示:

从零开始一起学习SLAM | C++新特性要不要学?

不过,auto使用时也有需要注意的地方:

比如auto不能代表一个实际的类型声明,auto声明的变量必须马上初始化

见下图:

从零开始一起学习SLAM | C++新特性要不要学?

更多内容可以网上查询,如果懒得找可以参考:

https://blog.csdn.net/m_buddy/article/details/72828576

3、简洁舒服的循环体

for循环是使用频率非常高的循环方式,在新特性里我们不需要再像以前那样每次都使用自增或者自减的方式来索引了,结合前面介绍的auto,我们可以极大简化循环方式,如下图所示:

从零开始一起学习SLAM | C++新特性要不要学?

而且这种循环支持大部分数据类型,比如数组,容器,字符串,迭代器等等。

从零开始一起学习SLAM | C++新特性要不要学?

4、简洁的lambda表达式

lambda表达式可以使得编程非常简洁,尤其适用于简单的函数,一般形式如下:

[函数对象参数](操作符重载函数参数)->返回值类型{函数体}

下面是几个例子及解释:

从零开始一起学习SLAM | C++新特性要不要学?

5、随心所欲可变长的参数模板

在Python和MATLAB中可以非常方便的使用可以变长的参数,C++11以后引入了tuple,可以实现类似功能,并且可以传入多个不同类型的数据,如下图所示

从零开始一起学习SLAM | C++新特性要不要学?

6、其他新特性自己学吧

除了上述介绍的常用的几种新特性外,还有很多新特性,比如:

decltype:像auto的反函数,可以从一个变量或表达式中得到类型;

nullptr:解决原来C++中NULL的二义性问题;

STL容器、智能指针、多线程相关的新特性

可以在网上查到很多资料,如果懒得找,可以看看下面两个链接。

https://www.cnblogs.com/feng-sc/p/5710724.html

http://towriting.com/blog/2013/08/01/what-is-cpp11/

文末知识星球里也有相关的电子书和视频讲解。

练习题
请使用C++新特性改写以下函数。该函数功能:将一组无序的坐标按照“Z”字形排序,并输出。

本程序学习目标:

熟悉C++新特性(简化循环、自动类型推导、列表初始化、lambda函数)

题目:

从零开始一起学习SLAM | C++新特性要不要学?

正确输出结果:

从零开始一起学习SLAM | C++新特性要不要学?

如果想要下载以上代码框架,在公众号菜单栏回复:11,即可。

欢迎留言讨论,更多学习视频、文档资料、参考答案等扫描下方二维码进入知识星球「从零开始学习SLAM」和其他学习SLAM学的伙伴一起学习交流~

相关阅读
从零开始一起学习SLAM | 为什么要学SLAM?

从零开始一起学习SLAM | 学习SLAM到底需要学什么?

从零开始一起学习SLAM | SLAM有什么用?

零基础小白,如何入门计算机视觉?

原文链接:从零开始一起学习SLAM | C++新特性要不要学?
---------------------
作者:electech6
来源:CSDN
原文:https://blog.csdn.net/electech6/article/details/82891655
版权声明:本文为博主原创文章,转载请附上博文链接!

从零开始一起学习SLAM | C++新特性要不要学?的更多相关文章

  1. 从零开始一起学习SLAM | 掌握g2o边的代码套路

    点"计算机视觉life"关注,置顶更快接收消息! 小白:师兄,g2o框架<从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码>,以及顶点<从零开始 ...

  2. 从零开始一起学习SLAM &vert; 掌握g2o顶点编程套路

    点"计算机视觉life"关注,置顶更快接收消息! ## 小白:师兄,上一次将的g2o框架<从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码>真的很清晰 ...

  3. 从零开始一起学习SLAM &vert; 理解图优化,一步步带你看懂g2o代码

    首发于公众号:计算机视觉life 旗下知识星球「从零开始学习SLAM」 这可能是最清晰讲解g2o代码框架的文章 理解图优化,一步步带你看懂g2o框架 小白:师兄师兄,最近我在看SLAM的优化算法,有种 ...

  4. 从零开始一起学习SLAM &vert; 点云平滑法线估计

    点击公众号"计算机视觉life"关注,置顶星标更快接收消息! 本文编程练习框架及数据获取方法见文末获取方式 菜单栏点击"知识星球"查看「从零开始学习SLAM」一 ...

  5. 从零开始一起学习SLAM &vert; 给点云加个滤网

    对VSLAM和三维重建感兴趣的在计算机视觉life"公众号菜单栏回复"三维视觉"进交流群. 小白:师兄,上次你讲了点云拼接后,我回去费了不少时间研究,终于得到了和你给的参 ...

  6. 从零开始一起学习SLAM &vert; 你好,点云

    本文提纲 先热热身点云是啥你知道点云优缺点吗?点云库PCL:开发者的福音PCL安装指北炒鸡简单的PCL实践留个作业再走先热热身 小白:hi,师兄,好久不见师兄:师妹好,上周单应矩阵作业做了吗?小白:嗯 ...

  7. 从零开始一起学习SLAM &vert; 神奇的单应矩阵

    小白最近在看文献时总是碰到一个奇怪的词叫“homography matrix”,查看了翻译,一般都称作“单应矩阵”,更迷糊了.正所谓:“每个字都认识,连在一块却不认识”就是小白的内心独白.查了一下书上 ...

  8. 从零开始一起学习SLAM &vert; 不推公式,如何真正理解对极约束&quest;

    自从小白向师兄学习了李群李代数和相机成像模型的基本原理后,感觉书上的内容没那么难了,公式推导也能推得动了,感觉进步神速,不过最近小白在学习对极几何,貌似又遇到了麻烦... 小白:师兄,对极几何这块你觉 ...

  9. 从零开始一起学习SLAM &vert; 相机成像模型

    上一篇文章<从零开始一起学习SLAM | 为啥需要李群与李代数?>以小白和师兄的对话展开,受到了很多读者的好评.本文继续采用对话的方式来学习一下相机成像模型,这个是SLAM中极其重要的内容 ...

随机推荐

  1. Hadoop:操作 Hadoop Cluster

    启动Hadoop 当完成所有的必要配置后,将HADOOP_CONF_DIR目录中的所有配置文件复制到所有机器,建议将HDFS和YARN后台进程一不同的用户身份运行,比如运行HDFS进程们的用户为hdf ...

  2. 关于litJson的System&period;InvalidCastException

    最近在做一个Unity3D的项目,用到了litJson库, 它比JavaScript里的JSON解析更加严格, 有时候解析数据的时候会出现类型不对. 比如说 {"data":12} ...

  3. bzoj 1061 志愿者招募&lpar;最小费用最大流&rpar;

    [Noi2008]志愿者招募 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 3792  Solved: 2314[Submit][Status][Di ...

  4. C&sol;C&plus;&plus;开发工具大比拼【转】

    C/C++开发工具大比拼[转]  (http://hi.baidu.com/vipdowndown/blog/item/dcd7c1b5ad3209ef30add167.html) * NetBean ...

  5. 点击Winform右下角图标,在最前端展示窗口

    //调用Windows API 展示窗口到最前端 SwitchToThisWindow(this.Handle, true);//窗体的句柄 this.Handle     SwitchToThisW ...

  6. JVM -- CMS

    并发的标记—清除(Concurrent Mark Sweep,缩写为 CMS)收集器,使得在整个收集的过程中只是很短的暂停应用的执行,可通过在 JVM 参数中设置-XX:UseConcMarkSwee ...

  7. PHP date&lpar;&rpar;函数详解

    date (PHP 4, PHP 5) date - 格式化一个本地时间/日期 说明¶ string date ( string $format [, int $timestamp ] ) 返回将整数 ...

  8. Doctype知识点总结

    DOCTYPE是document type (文档类型) 的缩写.<!DOCTYPE >声明位于文档的最前面,处于标签之前,它不是html标签.主要作用是告诉浏览器的解析器使用哪种HTML ...

  9. bently addin 二次开发学习

    元素结构: 一些基本元素的添加与绘制: class CreateElement { public static void LineAndLineString() { Application app = ...

  10. Python的图像库

    对数字图像基本的处理的学习按照下面两个博客: Python的图像库(Opencv.PIL.matplotlib.skimage)的使用(读取.存储.变换.滤波) python数字图像处理