C++11 基于范围的for循环

【1】基于范围的for循环演化过程

(1)C++98传统写法

 1 // C++98 传统写法
 2 
 3 #include 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int arr[5] = { 1, 2, 3, 4, 5 };
 9 
10     int* p = nullptr;
11 
12     for (p = arr; p < arr + sizeof(arr) / sizeof(arr[0]); ++p)
13     {
14         *p *= 2;
15     }
16 
17     for (p = arr; p < arr + sizeof(arr) / sizeof(arr[0]); ++p)
18     {
19         cout << *p << endl;
20     }
21 }

(2)利用模板库std::for_each写法

 1 // 利用模板库std::for_each写法
 2 
 3 #include 
 4 #include 
 5 using namespace std;
 6 
 7 void action1(int& e) { e *= 2; }
 8 void action2(int& e) { cout << e << '\t';  }
 9 
10 int main()
11 {
12     int arr[5] = { 1, 2, 3, 4, 5 };
13     for_each(arr, arr + sizeof(arr) / sizeof(arr[0]), action1);
14     for_each(arr, arr + sizeof(arr) / sizeof(arr[0]), action2);
15 }

(3)基于范围的for循环

 1 // 基于范围的for循环
 2 
 3 #include 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int arr[5] = { 1, 2, 3, 4, 5 };
 9     for (int& e : arr)
10         e *= 2;
11     for (int& e : arr)
12         cout << e << '\t';
13 }

(4)注意(*i)与 e的区别

 1 // 注意(*i)与 e的区别:
 2 
 3 #include 
 4 #include 
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     vector<int> v = { 1, 2, 3, 4, 5 };
10     for (auto i = v.begin(); i != v.end(); ++i)
11         cout << (*i) << endl;  // i是迭代器对象 
12     for (auto e : v)
13         cout << e << endl;     // e是解引用后的对象
14 }

 

good good study, day day up.

顺序 选择 循环 总结

你可能感兴趣的:(C++11 基于范围的for循环)