这是个笔记,并非教程。
前言
这里将记录个人在写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 |