(1)重载运算符<< 和 >>
为什么要重载运算符?
C++语言中已经给出的运算符(包括算数运算符和逻辑运算符)只是针对C++语言中已经给定的数据类型进行运算,假如我们想要对我们的自定义数据类型进行运算的话,则需要重载运算符,我们可以把重载运算符理解成对已有的运算符的一种重新定义。
语法格式如下
<返回类型> operator <运算符符号>(<参数>)
{
<定义>;
}
举个栗子 重载运算符<
struct node{
double x,y;
};
bool operator <(const node &a, const node &b ){
return a.x < b.x && a.y < b.y ;
}
重载运算符以后就可以比较自定义数据类型a和b的大小了
不懂的话可以参考下面文章 讲的很详细
C++中运算符的重载 - ZhiboZhao - 博客园 (cnblogs.com)
(2)关于 auto
auto c = quat.q.coeffs();
auto的原理就是根据后面的值,来自己推测前面的类型是什么。
auto的作用就是为了简化变量初始化,如果这个变量有一个很长很长的初始化类型,就可以用auto代替。
注意点:
1.用auto声明的变量必须初始化(auto是根据后面的值来推测这个变量的类型,如果后面没有值,自然会报错)
2.函数和模板参数不能被声明为auto(原因同上)
3.因为auto是一个占位符,并不是一个他自己的类型,因此不能用于类型转换或其他一些操作,如sizeof和typeid
4.定义在一个auto序列的变量必须始终推导成同一类型
示例:
std::vector<std::string> ve;
std::vector<std::string>::iterator it = ve.begin();
我们可以用atuo来代替那个初始化类型:
auto it = ve.begin();
for(auto i : v)
//c++11的新特性,v是一个可遍历的容器或流,比如vector类型,i就用来在遍历过程中获得容器里的每一个元素。
for(auto count : counts)
//意思是将 counts 容器中的每一个元素从前往后枚举出来,并用 count 来表示,
关于c++11新特性有博主总结过,遇到的可以去查看相关内容
c++11新特性,所有知识点都在这了! - 知乎 (zhihu.com)
详细代码参考下面文章
视觉SLAM十四讲CH3代码解析及课后习题详解_nudt一枚研究生-CSDN博客