C++11特性

来源:互联网 发布:mac select会员 编辑:程序博客网 时间:2024/06/05 15:30

C++11特性摘要

英文原版链接:http://codeforces.com/blog/entry/15643

一、"{}"赋值

vector<int> v; v = {1, 2, 3};pair<int, int> p; p = {1, 2};vector<pair<int, int> > vv; vv = {{1, 3}, {2, 4}};
    
注:不可用于stack、queue


二、打印变量名

#define what_is(x) cerr << #x << " is " << x << endl;<span style="font-family: Arial, Helvetica, sans-serif;">what_is(</span><span style="font-family: Arial, Helvetica, sans-serif;">a_variable</span><span style="font-family: Arial, Helvetica, sans-serif;">)</span><span style="font-family: Arial, Helvetica, sans-serif;">;</span>
  // prints "a_variable is 376"
<pre name="code" class="cpp"><span style="font-family: Arial, Helvetica, sans-serif;">what_is(</span><span style="font-family: Arial, Helvetica, sans-serif;">a_variable * 2 + 1</span><span style="font-family: Arial, Helvetica, sans-serif;">)</span><span style="font-family: Arial, Helvetica, sans-serif;">;</span>
// prints "a_variable * 2 + 1 is 753"


三、可变参函数

int sum() { return 0; }template<typename T, typename... Args>T sum(T a, Args... args) { return a + sum(args...); }int main() { cout << sum(5, 7, 2, 2) + sum(3.14, 4.89); }  /* prints "24.03" */


四、auto变量访问容器内元素

set<int> s = {8, 2, 3, 1};for (auto it: s)      cout << it << ' ';// prints "1 2 3 8"

            also:

vector<int> v = {8, 2, 3, 1};for (auto &it: v)    it *= 2;for (auto it: v)    cout << it << ' ';// prints "16 4 6 2"


五、二维数组元素的打印
   
for(i = 1; i <= n; i++) {     for(j = 1; j <= m; j++) {          cout << a[i][j] << " \n"[j == m];      }}


六、make_tuple and emplace_back

#define mt make_tuple#define eb emplace_backint main(){     int a,b,c;     tie(a,b,c) = mt(1,2,3); // assign     tie(a,b) = mt(b,a); // swap(a,b)     vector<pair<int,int>> v;      v.eb(a,b); // shorter and faster than pb(mp(a,b))}


    tie(args...)的使用:
     
tuple<int, int, int, char> t (3, 4, 5, 'g');int a, b;tie(b, ignore, a, ignore) = t;cout << a << ' ' << b << '\n';


七、函数的嵌套定义
    格式: 
[capture list](parameters) -> (return value) { body }

    说明: Capture List: 通常省略即可
             parameters: 形参的定义
             return value: 返回值类型
           body: 函数体

vector<int> v = {3, 1, 2, 1, 8};            sort(begin(v), end(v), [] (int a, int b) -> bool { return a > b; });            for (auto i: v) cout << i << ' ';


auto f = [] (int a, int b) -> bool { return a < b; }cout << f(1, 2); // prints "1"

vector<int> v = {3, 1, 2, 1, 8};sort(begin(v), end(v), [] (int a, int b) -> bool { return a > b; });for (auto i: v) cout << i << ' ';

0 0
原创粉丝点击