获取随机数
一、C++11 方式
- random_device 对象,他为随机引擎种子生成不确定的随机位,这对于避免产生相同的数字序列非常重要
- random engine:生成随机的 bit 流。
- distribution:生成满足用户需求的随机数
1 | //doule转string |
使用模版保留小数
1 | template<typename T> |
使用 std::getenv
访问
getenv
是在 C 标准库中实现的符合 POSIX 标准的函数。要求参数字符串不能用小写字母
1 | const char* tmp = std::getenv("HOME_HELLO"); |
环境变量在必要的时候要检查它的正确性。他有可能会攻击我们的程序。
1 | double pi = 3.14; |
使用 strtock 函数进行字符串分割
1 | char *strtok(char *str, const char *delim); |
c++11 实现的定时器
https://www.zhihu.com/question/38427301
c++异步编程 async的使用
https://cloud.tencent.com/developer/article/1584075
string 是模版 basic_string 对于char 类型的特化,可以认为是一个只存放字符 char 类型数据的容器。string 一般并不被认为是一个C++的容器,但是和容器有很多共同点
1 | 对于对外暴露的接口,一般不建议在接口中使用 const string&,除非确知调用者已经持有 string,如果函数里不对字符串做复杂处理的话,使用 const char* 可以避免在调用者只有 C 字符串时编译器自动构造 string,这种额外的构造和析构代码并不低。如果实现较为复杂、希望使用 string 的成员函数的话,那应该考虑下面的策略: |
vector 底层是一个动态数组,他维护了一段连续的动态内存空间,然后有三个成员变量分别保存开始位置、当前已使用位置、申请的动态内存的最后一个位置的下一个位置。每当当前所申请的动态内存已经用完时,他会按照原来空间大小的两倍重新申请内存块,并把原来的元素都拷贝过去。
特别注意:当 push_back、insert、reserve、resize 等函数导致内存重分配时,或当 insert、erase 导致元素位置移动时,vector 会试图把元素“移动”到新的区域。vector 通常保证强异常安全性,如果元素类型没有提供一个保证不抛出异常的移动构造函数,vector 通常会使用拷贝构造函数。解决办法:我们应该定义移动构造函数,并标其为 noexcept,或只在容器中放置对象的智能指针。
1 | void dis_1(const int x){ |
C++ 11标准中,为了解决 const 关键字的双重语义问题,保留了 const 表示“只读”的语义,而将“常量”的语义划分给了新添加的 constexpr 关键字。因此 C++11 标准中,建议将 const 和 constexpr 的功能区分开,即凡是表达“只读”语义的场景都使用 const,表达“常量”语义的场景都使用 constexpr。
“只读“和”不允许修改“这两个没有必然的联系。对于只读的变量也可以被修改,如下例子:
1 | int main() { |