C#和java中都有foreach,foreach可以减少代码的长度和复杂性让程序更为简单。
int main() {
int a[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
vector<int> v(a, a + sizeof(a) / sizeof(a[0]));
foreach (int x, v) {
cout << x << endl;
}
return 0;
}
c++的实现方法为(copy QT代码)
template <typename T>
class ForeachContainer {
public:
inline ForeachContainer(const T& t) : brk(0), i(t.begin()), e(t.end()) { }
int brk;
typename T::const_iterator i, e;
};
#define FOREACH(variable, container) \
for (ForeachContainer<__typeof__(container)> _container_(container); \
!_container_.brk && _container_.i != _container_.e; \
__extension__ ({ ++_container_.brk; ++_container_.i; })) \
for (variable = *_container_.i;; __extension__ ({--_container_.brk; break;}))
#define foreach FOREACH