C++11新特性

1、auto关键字

在C++11我们可以使用auto去声明一个变量,但是这并不意味着C++增加了一个auto类型(一个可以表示任意类型的类型)。因为C++语言强类型特性是不会变的,变的只是编译器,它变的更加高级(推导出确定的类型)。

std::vector<int> vec_int;
// 旧的C++语法
std::vector<int>::iterator iter = vec_int.begin();
// 在C++11之前,为了简化代码,大多采用预处理typedef
typedef std::vector<int>::iterator vec_int_iter;
// 新的C++11语法
auto iter = vec_int.begin();

2、for循环的新用法

遍历列表

// 这里使用到了C++11的初始化列表特性
std::vector<std::string> str_vec = {“i”, “like”,  "google”};  
for(auto& str : str_vec)
{
     printf("%s\n", str.c_str());
}

遍历map

std::unordered_map<int, std::string> language_map = {{1, “c++”}, {2, “java”}, {3, “python”}};  
for(auto& my_pair : language_map)
{  
     printf("%d-->%s\n", my_pair.first, my_pair.second);
}  

3、简单类型与std::string互转API

// 简单类型转string
std::string to_string (int val);
std::string to_string (double val);
// string转简单类型
int std::stoi(std::string);
long std::stol(std::string);
double std::stod(std::string);
float std::stof(std::string);

4、使用nullptr替代NULL

空指针标识符nullptr是一个表示空指针的标识,他不是一个整数,这是与我们常用的NULL宏的区别。NULL只是一个定义为常整数0的宏,而nullptr是C++11的一个关键字,一个內建的标识符。

5、std::vector使用emplace_back替代push_back

5.1、C++11引入右值引用和移动构造函数后,对push_back的性能带来了极大提升

// 此处push_back左值,会调用拷贝构造
std::string temp = "abc";
vec.push_back(temp)

// 此处push_back右值引用,调用移动构造,性能提升
std::string temp("abc");
vec.push_back(std::move(temp));

// 此处push_back右值引用,调用移动构造,性能提升
vec.push_back(std::string("abc"));

// 此处push_back右值引用,调用移动构造,性能提升
vec.push_back("abc");

// 此处emplace_back右值,调用移动构造,性能提升
std::string temp("abc");
vec.push_back(std::move(temp));

// 此处emplace_back右值,直接就地构造
vec.push_back(std::string("abc"));
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值