C++11特性

C++11特性摘要


一、"{}"赋值

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_back
int 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 << ' ';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值