链接网站
- C++实例代码 https://blog.csdn.net/CV2017/article/details/82597666
- C++ Primer plus答案:https://blog.csdn.net/Chen9426/article/details/81367663
2019.03.03
- 解决不能使用strcat等函数的方法
#pragma warning(disable:4996)
C++中出现cout不明确的解决方法
将using namespace std; 删除后保存cpp文件,
再加上using namespace std;保存cpp文件。
string操作
#include <algorithm>
#include <string>
string A;
reverse(A.begin(), A.end()); //反向
int i;
std::to_string(i); //整数转string
std::stoi(str,nullptr,10); //string转整数,最后一个参数为进制
atoi(str.c_str()) //C库函数
C++输出有效数字的限制
real = fabs(real) < 0.01 ? 0 : real;
imag = fabs(imag) < 0.01 ? 0 : imag;
if (imag < 0)
printf("%.2lf-%.2lfi", real, -imag);
else
printf("%.2lf+%.2lfi", real, imag);
//输出保留两位小数,因此当数值小于0.01时,视为0
查看某个变量的类型
#include <typeinfo>
int tmp;
typeid(tmp).name();
vector转化为Eigen::VectorXd
sensor_input = Eigen::Map<Eigen::MatrixXd>(sensor_input_vector.data(),3,sensor_input_vector.size());
Eigen::MatrixXd转换为vector
std::vector<double> vec(w.data(), w.data() + w.rows()*w.cols());
QVector<double> qvec = QVector<double>::fromStdVector(vec);
按行按列求和
MatrixXd w = dataMat.rowwise().sum();
MatrixXd w = dataMat.colwise().sum();
vector定义二维数组
vector<vector<int>> a(10, vector<int>(5));
成员函数后加override,&,&&
- __super()::调用该类的基类成员或函数
- override限定重写的虚函数必须要和基类的定义完全相同,否则会报错
class Anen
{
public:
void left_value() & {};
void right_value() && {};
private:
int m_i;
};
函数后加&,表示只有左值才可以调用,不能是一个临时对象,加&&只能由临时对象调用
Anen a;
a.left_value(); //正确
a.right_value(); //错误
Anen().right_value(); //正确
C++不加public,private,protected时
在struct内默认定义是public 如果是class里面则是private
string重载操作符使用
string str = "hello";
str.operator+=(" world");
operator<<(std::cout, str);
int const和const int
int* const p = &array: 指针p不能够指向其他地址
const int* p = &array: 指针p只读&array,不能够对其进行修改
Labmda 按值和引用的操作
int x = 1;
auto func = [x]()mutable {x += 1; cout << x << endl; };
func();
func();
cout << x;
//输出为 2 3 1
int x = 1;
auto func = [&x](){x += 1; cout << x << endl; }; //按引用传值不用加mutable
func();
func();
cout << x;
//输出为 2 3 3
private继承
使用private继承后,成员和方法都变成私有的,相当没有继承公有接口,加using之后可以将基类的公有方法属性进行恢复
class Alen
{
public:
int getData() { return m_data; }
int m_data = 0;
private:
};
class Armin : private Alen
{
public:
int getValue() { return m_data; }
using Alen::getData;
};
Armin ar;
ar.getData(); //不加using会报错,加using不报错
const_cast的作用
将常量指针转为非常量指针,或将常量转为非常量引用。
const int constant = 21;
int* modifier = const_cast<int*>( &constant);
*modifier = 7;
cout << modifier << " " << &constant << " " << *modifier << " " << constant;
//0x62fe0c 0x62fe0c 7 21
//转化后的指针可以修改值,但原来的值不会改变
++k和k++的不同
UPInt& UPInt::operator++()
{
*this += 1; // 增加
return *this; // 取回值
}
// postfix form: fetch and increment
const UPInt UPInt::operator++(int)
{
UPInt oldValue = *this; // 取回值
++(*this); // 增加
return oldValue; // 返回被取回的值
}
VS正则表达式
^\s*(?=\r?$)\n 删除空格
".?" 删除字符串
//.?\n 删除注释
QString((.*?)) 替换为tr($1)
std::chrono实现微秒计时
auto tp1 = std::chrono::steady_clock::now();
auto tp2 = std::chrono::steady_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::microseconds>(tp2 - tp1).count() << std::endl;