C++11语言特性小结

c++11新语言特性梳理(这里整理算法书上的内容,方便日后复习)

1、类型推导(auto)
这个不用多说,c++11提供了不需要预先知道变量类型时,即可定义变量的方式:auto关键字。其实我认为一般在明确知道变量类型时,不用偷懒还是用确定的变量类型定义即可,一般auto用在不知道变量类型或者是声明迭代器变量时:

vector<int> vec;
vector<int> vec::iterator iter = vec.begin();
auto iterNew = vec.begin();

vector<int> vec2 = {1,2,3};
auto& iter2 = vec[1];
iter2 += 1; // vec2 = {1,3,3}

2、空指针(nullptr)
之前都用NULL表示空指针,实际上NULL与0是等价的,这样有时字符变量与整型变量容易混淆导致错误,c++11用专门的空指针数据类型:nullptr。
这个混淆主要是发生在参数重载过程中,传入空指针到底是用参数为int的函数还是参数为char*的函数呢?

3、容器的for循环遍历
这个就记住这种格式吧:

for(const auto& x : vec){
	cout << x << '\t';
}

4、匿名函数(lambda表达式)
匿名函数是及其重要的改进,是函数式编程风格的基石,简单地说就是可以在需要的地方定义函数,而不是一定要提前定义好。

using namespace std;
#define _for(i,a,b) for(int i=(a); i<(b); i++)
const int N = 1000000000;
struct TS{
	int a,b,c;
};
TS tss[N]
void genData(){
	_for(i,0,N){
		tss[i].a = rand();
		tss[i].b = rand();
		tss[i].c = rand();
	}
}

int main(){
	genData();
	//重点来啦:
	//[]内可以扑捉外部变量
	//()内为参数列表
	sort(tss, tss+N, [](const TS& t1, const TS& t2){
		if(t1.a != t2.a) return t1.a < t2.a;
		if(t1.b != t1.b) return t1.b < t2.b;
		else
		    return t1.c < t2.c;
		});
	return 0;
}

哈希容器
之前我们经常用到map容器和multimap容器,其都是基于二叉树实现的,在数据量较大时查询时间复杂度为O(logn),并无法达到标准的hash算法的速度,C++正式引入了几个基于Hash算法的容器:unordered_map, unordered_set, unordered_multimap 和 unordered_multiset。当不需要元素排序时可以尽量使用这些容器获得更好的查找性能

猜你喜欢

转载自blog.csdn.net/qq_34606546/article/details/85643952