1.C++常用函数
//uniform_real_distribution 类模板定义了一个默认返回 double 型浮点值的连续分布。可以按如下方式生成一个返回值在范围 [0,10) 内的分布对象:
#include <random>
std::uniform_real_distribution<> values {0.0, 10.0};
std::random_device rd; // Non-de terrains tic seed source
std::default_random_engine rng {rd()}; // Create random number generator
for(size_t i {}; i<8; ++i)
std::cout << std::fixed << std::setprecision(2)<< values (rng) <<" ";
// 8.37 6.72 6.41 6.08 6.89 6.10 9.75 4.07
#include <math.h>
floor()是向负无穷大舍入,floor(-10.5) == -11;
ceil()是向正无穷大舍入,ceil(-10.5) == -10
double pow(double x, double y) ## 返回x的y次幂
"常量:在程序执行期间不会改变的变量."
#define SCREEN_DIGITAL 100
const int SCREEN_DIGITAL = 100;
2.设置全球唯一标识(ID)
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/uuid/uuid_generators.hpp>
// 就算将以下两行放入for循环中,依然可行,不会产生重复ID;亦可获取多个生成器同时执行ID获取!;
boost::uuids::uuid a_uuid = boost::uuids::random_generator()(); // 这里是两个() ,因为这里是调用的 () 的运算符重载
const string tmp_uuid = oost::uuids::to_string(a_uuid);
3.设置时间轴,查询程序运行的时间间隔
#include <chrono>
const auto t1 = std::chrono::steady_clock::now(); ## 设置时间记录
--"主程序运行的代码函数片段"--
const auto t2 = std::chrono::steady_clock::now();
const auto duration12 = std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count(); ## 获取时间间隔(微秒)
> 转成秒:*1e-3
4.C++头文件避免include的两种方式
"方式一:"
#ifndef SOME_UNIQUE_NAME_HERE
#define SOME_UNIQUE_NAME_HERE
// contents of the header
...
#endif // SOME_UNIQUE_NAME_HERE
---
"方式二:"
#pragma once
两种方式的比较:
F1: #ifndef
方式依赖于宏名不能冲突。它不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。缺点是如果不同头文件中的宏名不小心”碰撞”,可能就会导致你看到头文件明明存在,编译器却硬说找不到声明的状况。由于编译器每次都需要打开头文件才能判定是否有重复定义,因此在编译大型项目时,#ifndef会使得编译时间相对较长.
F2: #pragma once
一般由编译器提供保证:同一个文件不会被包含多次。这里所说的”同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。无法对一个头文件中的一段代码作#pragma once声明,而只能针对文件。此方式不会出现宏名碰撞引发的奇怪问题,大型项目的编译速度也因此提供了一些。缺点是如果某个头文件有多份拷贝,此方法不能保证它们不被重复包含。
5. 一个好用的文档工具
doxygen
// 可以使用gui工具生成类似官方文档的html,可以直接在浏览器打开阅读,
// 对于阅读中型库具有一定参考作用
doxywizard
// 安装: sudo apt-get install doxygen doxygen-gui