在C++中,标准C++本身并没有内置的`foreach`循环,但可以通过多种方式实现类似的功能。
### 自定义宏实现
可以通过自定义宏来实现`foreach`循环,示例代码如下:
```cpp
#include <iostream>
#include <vector>
#define foreach(container,it) \
for(typeof((container).begin()) it = (container).begin();it!=(container).end();++it)
int main() {
std::vector<int> intVector = {1, 2, 3, 4, 5};
foreach(intVector, it) {
std::cout << *it << std::endl;
}
return 0;
}
```
这里定义了`foreach`宏用于遍历容器,通过`typeof`获取容器迭代器类型,然后进行遍历操作[^1]。
### 使用Boost库的`BOOST_FOREACH`
Boost库提供了`BOOST_FOREACH`宏来实现类似`foreach`的功能,示例如下:
```cpp
#include <iostream>
#include <vector>
#include <boost/foreach.hpp>
void add(int& num) {
std::cout << num << std::endl;
}
int main() {
std::vector<int> intVector = {1, 2, 3, 4, 5};
BOOST_FOREACH(int& a, intVector) {
add(a);
}
return 0;
}
```
在这个例子中,`BOOST_FOREACH`用于遍历`intVector`容器,并对每个元素执行`add`函数[^2]。
### Qt中的`foreach`
在Qt框架中,有自己的`foreach`语法糖,示例如下:
```cpp
#include <QCoreApplication>
#include <QList>
#include <QString>
#include <QDebug>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QList<QString> listTemp;
listTemp << "aaa" << "bbb" << "ccc";
QString strTemp2;
foreach(QString strTemp1, listTemp) {
strTemp2 = strTemp1;
qDebug() << strTemp2;
}
return a.exec();
}
```
`foreach`用于遍历`listTemp`列表,将列表中的每个元素依次赋值给`strTemp1`,并进行相应操作[^3]。
### 自定义类实现`foreach`
可以通过自定义类和宏来实现`foreach`功能,示例代码如下:
```cpp
// foreach.hpp
#ifndef FOREACH_HPP
#define FOREACH_HPP
template <typename container_type>
class Foreach_container {
public:
Foreach_container(const container_type &c) : begin(c.begin()), end(c.end()) {}
Foreach_container(container_type &c) : begin(c.begin()), end(c.end()) {}
decltype(container_type().begin()) begin, end;
bool f = true;
};
#define FOREACH(var, container) \
for (auto _container_ = Foreach_container<decltype(container)>(container); \
_container_.f && _container_.begin != _container_.end; \
++_container_.begin, _container_.f = true) \
for (var = *_container_.begin; _container_.f; _container_.f = false)
#ifndef foreach
#define foreach FOREACH
#endif
#endif // FOREACH_HPP
```
```cpp
// main.cpp
#include <iostream>
#include <vector>
#include "foreach.hpp"
int main(void) {
std::vector<int> vec{1, 2, 3, 4, 5};
foreach (int var, vec) {
std::cout << var << std::endl;
}
return 0;
}
```
这里通过自定义`Foreach_container`类和`FOREACH`宏实现了`foreach`功能,在`main`函数中可以使用该宏来遍历`std::vector`容器[^4]。
### C++11及以后的范围for循环
C++11引入了范围for循环,这是一种更简洁的`foreach`实现方式,示例如下:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> intVector = {1, 2, 3, 4, 5};
for (int num : intVector) {
std::cout << num << std::endl;
}
return 0;
}
```
范围for循环可以直接遍历容器中的每个元素,代码更加简洁易读。