1.右值引用
右值引用 (Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move Sementics) 和精确传递 (Perfect Forwarding)。
它的主要目的有两个方面:
消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。能够更简洁明确地定义泛型函数。
消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。能够更简洁明确地定义泛型函数。
C++( 包括 C) 中所有的表达式和变量要么是左值,要么是右值。通俗的左值的定义就是非临时对象,那些可以在多条语句中使用的对象。
所有的变量都满足这个定义,在多条代码中都可以使用,都是左值。 右值是指临时的对象,它们只在当前的语句中有效。
int i = 0; // 在这条语句中,i 是左值,0 是临时值,就是右值。在C++11之前,右值是不能被引用的,如:
int &a = 1; // error C2440: “初始化”: 无法从“int”转换为“int &”在C++11中,我们可以引用右值,使用&&来实现:
int &&a = 1;右值引用常与move同时使用(待补充
2.auto遍历容器
-
拷贝range的元素时,使用for(auto x : range).
-
修改range的元素时,使用for(auto && x : range).
-
只读range的元素时,使用for(const auto & x : range).
3.##与#🙈
使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起.
#是连接字符串的,##是粘合成一个名字的。
#include <iostream> using namespace std; #define F(x, y) x##y #define F2(x) cout<< "C"#x#x <<endl //注意字符串是要加引号的 int main() { int len = 0; F(l, en) = 1; //相当于将len重新赋值了 cout << len << endl; //输出1 //int lnln = 0; //F2(l, n) = 1; //报错,error: use of undeclared identifier 'l' F2(P); //输出CPP return 0; }
#include<cstdio> #include<climits> using namespace std; #define STR(s) #s #define CONS(a,b) int(a##e##b) int main() { printf(STR(vck)); // 输出字符串"vck" printf("%d\n", CONS(2,3)); // 2e3 输出:2000 return 0; }注意:
当宏参数是另一个宏的时候,需要注意的是凡宏定义里有用’#’或’##’的地方宏参数是不会再展开. 即, 只有当前宏生效, 参数里的宏不会生效
4.typedef typename
5.全排列函数next_permutation(注意使用前排序✍)
next_permutation函数将按字母表顺序生成给定序列的下一个较大的排列,直到整个序列为降序为止。
prev_permutation函数与之相反,是生成给定序列的上一个较小的排列。
这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件<algorithm>
这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件<algorithm>
使用时注意复杂度问题,n个不相同的数字的全排列 O(n !)
使用方法:next_permutation(数组头地址,数组尾地址);若下一个排列存在,则返回真,如果不存在则返回假
int main() { int num = 1,a[6]= {1,2,3,4,5}; while(next_permutation(a,a+5)) { for(int i=0; i<5; i++) cout<<a[i]<<" "; if(num==5) break; num++; cout<<endl; } return 0; }
6. random_shuffle() 随机排序
函数原型:
template<class RandomAccessIterator> void random_shuffle( RandomAccessIterator _First, //指向序列首元素的迭代器 RandomAccessIterator _Last //指向序列最后一个元素的下一个位置的迭代器 );
试用范围:一般是vector这种连续型可任意访问的容器,string或者数组也能使用。对于set、map(自带排序功能)的容器或者非连续性容器无法使用。
依然是拿来暴力水数据。。
.2