C++11 基于范围的循环

一 语法

  • C++11增加了基于范围的循环,语法如下:
attr(optional) for ( range_declaration : range_expression ) 
    loop_statement (until C++20)
attr(optional) for ( init-statement(optional)range_declaration : range_expression )
    loop_statement (since C++20)

二 举例

  • 应用于容器
{
     
    // 容器
    cout << "vc: ";
    std::vector<int> vc {
     1,2,3};
    for (auto i : vc) {
     
      cout << i << " ";
    }
    cout << endl;
}
  • 结果
vc: 1 2 3
  • 允许操作初值列和寻常的、大小已知的C-style array
{
     
  // C-Style 数组
  cout << "sz: ";
  int sz[] = {
     1, 2, 3};
  for (auto i : sz) {
     
    cout << i << " ";
  }
  cout << endl;
}
{
     
  // initialize_list
  cout << "list: ";
  for (auto i : {
     1, 2, 3}) {
     
    cout << i << " ";
  }
  cout << endl;
}
  • 结果
sz: 1 2 3
list: 1 2 3

三 相关算法

  • for_each
bool even(int n){
     
  if (n%2 ==0) {
     
    cout << n << " is even " << endl;
    return true;
  }
  return false;
}

{
     
  std::vector<int> vc{
     1, 2, 3};
  for_each(vc.begin(), vc.end(), even);
  cout << endl;
}
  • 结果
2 is even
  • for_each_n (C++17)
// for_each_n (C++17)
{
     
  std::vector<int> vc{
     1, 2, 3};
  for_each_n(vc.begin(), 2, even);
  cout << endl;
}
  • 结果(待测)
2 is even

四 参考

  • cppreference

你可能感兴趣的:(#,C++11/14/17/20,基于范围的循环,range-based,for)