以上参考自:https://www.cnblogs.com/letgo/p/5631247.html
auto 用于从初始化表达式中推断出变量的数据类型。因此,auto定义的变量必须有初始值。 auto在c++14中可以作为函数返回值
decltype 的作用是选择并返回操作数的数据类型
nullptr 是为了解决原来C++标准中NULL的二义性问题而引进的一种新的类型,因为NULL实际上代表的是0。
constexpr 类型以便由编译器来验证变量的值是否为一个常量表达式,必须在编译期间计算出它的值并且它的值不可以被改变。const只保证了运行时不直接被修改(但这个东西仍然可能是个动态变量),const修饰的是类型,constexpr修饰的是用来算出值的那段代码
stl容器 array 跟数组并没有太大区别,相对于数组,增加了迭代器等函数。
stl容器 unordered_map 与std::map用法基本差不多,但STL在内部实现上有很大不同,std::map使用的数据结构为二叉树,而std::unordered_map内部是哈希表的实现方式,哈希map理论上查找效率为O(1)。但在存储效率上,哈希map需要增加哈希表的内存开销。
stl容器 forward_list
stl容器 unordered_set
lambda 表达式形式
[capture](parameters)->return-type{body}();
[] 不捕获任何变量
[&] 以引用方式捕获所有变量
[=] 用值的方式捕获所有变量(可能被编译器优化为const &)
[=, &foo] 以引用捕获foo, 但其余变量都靠值捕获
[&, foo] 以值捕获foo, 但其余变量都靠引用捕获
[bar] 以值方式捕获bar; 不捕获其它变量
[this] 捕获所在类的this指针
赋值类型是 function<返回值类型(参数类型)>
12. 基于范围的for循环,支持数组和容器
13. 元组类型 tuple
详细介绍看这里
14. emplace 很重要
使用mplace_back替代push_back()可以在这上面有进一步优化空间,只调用构造函数不需要调用右值引用转移构造函数
以上参考自:https://blog.csdn.net/raiven2008/article/details/82114736
https://www.cnblogs.com/chengjundu/p/10893702.html
https://blog.csdn.net/a379039233/article/details/83714770
以上参考自:http://c.biancheng.net/view/523.html
vector<int> v{5,6,23,6,1,3,2,7,0};
int k=4;
partial_sort(v.begin(),v.begin()+k,v.end());
for(auto i:v)
cout << i << " ";
vector<int> v{22, 7, 93, 45, 19, 56, 88, 12, 8, 7, 15, 10};
int k=4;
nth_element(begin(v),begin(v)+k,end(v));
for(auto i:v)
cout << i << " ";
vector<int> v{22, 7, 93, 45, 19, 56, 88, 12, 8, 7, 15, 10};
vector<int> w{22, 7, 93, 45, 19, 56, 88, 12, 8, 7, 15, 10};
cout << equal(begin(v)+1,end(v),w.begin(),w.end()) << endl;
cout << equal(begin(v)+1,end(v),w.begin()) << endl;
#pragma GCC optimize(2)
complex<double> z{1.5, -2.5}; // z: 1.5 - 2.5i
z.imag(99); // z: 1.5 + 99.0i
z.real(-4.5); // z: -4.5 + 99.0i
std::cout << "Real part: " << z.real()<< " Imaginary part: " << z.imag()<< std::endl;
//res = res + curr+to_string(count);//超出内存限制
res += curr+to_string(count); //这样才能通过
原因是: res+= s是表示在原来字符串后添加字符串。 res = res + s 是开辟了一个新内存存放res+s。如果字符串太长,开辟新空间就需要消耗大量内存。
一些STL的底层结构
set 红黑树
map 红黑树
unorderd_map 哈希表
unorderd_set 哈希表
multiset 红黑树
multimap 红黑树
priority_queue 堆
bitset的资料 这里
template <unsigned int n>
struct _fac { static const inline int val = n * _fac<n - 1>::val; };
template <>
struct _fac<0> { static const inline int val = 1; };
const int fac[10] {_fac<0>::val, _fac<1>::val, _fac<2>::val, _fac<3>::val, _fac<4>::val,
_fac<5>::val, _fac<6>::val, _fac<7>::val, _fac<8>::val, _fac<9>::val}; //储存阶乘值