C#和java中都有foreach,foreach可以減少代碼的長度和復(fù)雜性讓程序更為簡單。
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++的實(shí)現(xiàn)方法為(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