[C++]c++11部分新特性(不足会更新)

⭐auto
auto可以自己从初始化表达式中判断出变量的数据类型,能够大大简化我们的编程工作。它实际上在编译时对变量进行了类型推导,所以不会对程序的执行效率造成不良影响

auto a; // 错误,auto是通过初始化表达式进行类型推导,假设没有初始化表达式,就无法确定a的类型
auto i = 1;//int
auto d = 1.0;//double
auto str = "Hello World";//string
auto ch = 'A';//char
vector <int> v;
auto ite = v.begin();//iterator
auto p = new foo() // 对自己定义类型进行类型推导

auto可以用于for循环来简化代码
在C++中for循环能够使用类似java的简化的for循环,能够用于遍历数组、容器、string以及由begin和end函数定义的序列(即有Iterator),演示样例代码例如以下:

map<string, int> m{{"a", 1}, {"b", 2}, {"c", 3}};//定义哈希表
for (auto p : m){
    cout<<p.first<<" : "<<p.second<<endl;//遍历哈希表
}
string str("hello world");
for (auto c : str) {
    cout << c;//遍历字符串
}

⭐Lambda表达式
lambda表达式类似Javascript中的闭包,它能够用于创建并定义匿名的函数对象,以简化编程工作。Lambda的语法例如以下:
[函数对象參数](操作符重载函数參数)->返回值类型{函数体}

vector<int> iv{5, 4, 3, 2, 1};
int a = 2, b = 1;
for_each(iv.begin(), iv.end(), [b](int &x){cout<<(x + b)<<endl;}); // (1)
for_each(iv.begin(), iv.end(), [=](int &x){x *= (a + b);});     // (2)
for_each(iv.begin(), iv.end(), [=](int &x)->int{return x * (a + b);});// (3)

[]内的參数指的是Lambda表达式能够取得的全局变量。(1)函数中的b就是指函数能够得到在Lambda表达式外的全局变量,假设在[]中传入=的话,即是能够取得全部的外部变量,如(2)和(3)Lambda表达式
()内的參数是每次调用函数时传入的參数。
->后加上的是Lambda表达式返回值的类型。如(3)中返回了一个int类型的变量

⭐long long 类型
扩展精度浮点数,10位有效数字

⭐nullptr 常量
有几种生成空指针的方法:

int *p1 = nullptr; // 等价于int *p1 = 0;
int *p2 = 0;
int *p3 = NULL; // 等价于int *p3 = 0;

在新标准下,建议尽量使用新标准nullptr,nullptr是一种特殊类型的字面值,它可以被转换成任意其它的指针类型,虽然其它的方式也是可以的;

⭐除法的舍入规则
新标准中,一律向0取整(直接切除小数部分)

double a = 12/5;
cout << a << endl;//输出结果为2,删掉了小数部分;

⭐return的高级用法

string make_plural(size_t ctr, const string &word,const string &ending){
     return (ctr == 1) ? word : word + ending;//如果ctr==1,则返回word,否则返回word+ending
}

你可能感兴趣的:(C++,c++,java,算法)