这是个笔记,并非教程。
前言
这里将记录个人在写C++的过程中遇到的各种问题,以及解决方法。如果大家发现哪里写错了,过时了,或有别的任何问题,欢迎在下方评论或发邮件告知。
字符串相关
向需要std::string
的函数传递char
问题描述
有一个函数类似于
int foo(std::string st){
...
}
但是,我在调用的时候只是想传递一个字符给它,存在一个char
类型的变量里
char ch = '*';
foo(ch);
但这样写是不行的,因为类型不匹配。
如果是在别的地方,char
类型转std::string
类型可以用std::string(ch)
来进行,但在这里不行。
解决方法
在stackoverflow上找到了解决方案:How to pass a char to a function expecting a string
Mike Seymour的回答获得了最高赞同,对其翻译如下:
首先,C++中没有char
到std::string
中的隐式类型转换(implicit conversion)。因此,你必须使用一个合适的构造函数,这个构造函数需要两个参数,用法如下:
test(std::string(1, 'a'));
或者,从c++11
开始,可以借助初始化表(initialiser list)
test({'a'}); // 如果test函数的重载没有疑义
test(std::string{'a'}); // 如果你需要指明类型
Eigen库 && ligigl库
Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.
libigl is a simple C++ geometry processing library
Vector 以及 Matrix 类型
官方文档:The Matrix class
Eigen提供了非常多的类来描述向量和矩阵,然而他们都来自相同的模板类Matrix
。
这些类的命名方式为Matrix(N)(T)
或Vector(N)(T)
。其中(N)
代表维度,(T)
代表类型。例如,Matrix3f
表示的就是一个3×3的float
类型的矩阵。
符号(N)
除了数字之外,还可以是X
,表示不能提前确定其大小,例如VectorXf
。
符号(T)
的类型(我见过的)有三种:i
表示int
,f
表示float
,d
表示double
。
以下是一些定义变量的例子
using namespace Eigen;
Matrix3f a;
MatrixXf b;
MatrixXf c(10,15);
VectorXf d(30);
Vector2d e(5.0, 6.0);
Vector3d f(5.0, 6.0, 7.0);
Vector4d g(5.0, 6.0, 7.0, 8.0);
MATLAB to Eigen (&&igl)
《MATLAB to Eigen table》是供熟悉MATLAB的人参考的一个对照表。如果你熟悉MATLAB的话,可以通过这个对照表查找如果用Eigen和Ligigl实现MATLAB对应的操作。
Visual Studio 2015
快捷键
添加注释 | ctrl +k +c |
删除注释 | ctrl +k +u |