我是靠谱客的博主 喜悦火,这篇文章主要介绍C++11中for的使用,现在分享给大家,希望可以做个参考。

range-based for loops: Strings, arrays, and all STL containers can be iterated over with the new range-based for loop already.

C++11 augmented the for statement to support the "foreach" paradigm of iterating over collections. In the new form, it is possible to iterate over C-like arrays, initializer lists and anything for which the non-member begin() and end() functions are overloaded.

Ranged Based Loops, are like the C# foreach loop. The idea is to simplify iteration syntax on containers that have a beginning, an ending, and a forward iterator.

In order to make a data structure iterable, it must work similarly to the existing STL iterators:

(1)、There must be begin and end methods that operate on that structure, either as members or as stand-alone functions, and that return iterators to the beginning and end of the structure.

(2)、The iterator itself must support an operator* method, an operator != method, and an operator++ method, either as members or as stand-alone functions.

C++11中支持基于范围的for循环。

下面是从其他文章中copy的测试代码,详细内容介绍可以参考对应的reference:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include "for.hpp" #include <iostream> #include <vector> // reference: http://en.cppreference.com/w/cpp/language/range-for int test_for1() { std::vector<int> v = { 0, 1, 2, 3, 4, 5 }; for (const int& i : v) // access by const reference std::cout << i << ' '; std::cout << 'n'; for (auto i : v) // access by value, the type of i is int std::cout << i << ' '; std::cout << 'n'; for (auto&& i : v) // access by reference, the type of i is int& std::cout << i << ' '; std::cout << 'n'; for (int n : {0, 1, 2, 3, 4, 5}) // the initializer may be a braced-init-list std::cout << n << ' '; std::cout << 'n'; int a[] = { 0, 1, 2, 3, 4, 5 }; for (int n : a) // the initializer may be an array std::cout << n << ' '; std::cout << 'n'; for (int n : a) std::cout << 1 << ' '; // the loop variable need not be used std::cout << 'n'; return 0; } /// // reference: http://www.cprogramming.com/c++11/c++11-ranged-for-loop.html int test_for2() { // Modifying the Contents of the Vector std::vector<int> vec; vec.push_back(1); vec.push_back(2); for (int& i : vec) { i++; // increments the value in the vector } for (int i : vec) { // show that the values are updated std::cout << i << std::endl; } return 0; } // // reference: http://www.cprogramming.com/c++11/c++11-ranged-for-loop.html // forward-declaration to allow use in Iter class IntVector; class Iter { public: Iter(const IntVector* p_vec, int pos) : _pos(pos), _p_vec(p_vec) { } // these three methods form the basis of an iterator for use with a range-based for loop bool operator!= (const Iter& other) const { return _pos != other._pos; } // this method must be defined after the definition of IntVector since it needs to use it int operator* () const; const Iter& operator++ () { ++_pos; // although not strictly necessary for a range-based for loop // following the normal convention of returning a value from // operator++ is a good idea. return *this; } private: int _pos; const IntVector *_p_vec; }; class IntVector { public: IntVector() { } int get(int col) const { return _data[col]; } Iter begin() const { return Iter(this, 0); } Iter end() const { return Iter(this, 100); } void set(int index, int val) { _data[index] = val; } private: int _data[100]; }; int Iter::operator* () const { return _p_vec->get(_pos); } int test_for3() { IntVector v; for (int i = 0; i < 100; i++) { v.set(i, i); } for (int i : v) { std::cout << i << std::endl; } return 0; }

GitHub: https://github.com/fengbingchun/Messy_Test

最后

以上就是喜悦火最近收集整理的关于C++11中for的使用的全部内容,更多相关C++11中for内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(83)

评论列表共有 0 条评论

立即
投稿
返回
顶部