C++学习

链接网站

  1. C++实例代码 https://blog.csdn.net/CV2017/article/details/82597666
  2. 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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值