在 C++ 中有直接的类似物吗?
for num in [1,4,5] :
num=1
使用, then 4
, then遍历循环5
。如果我在这个循环中调用 continue ,它会转到下一个我可以调用它的号码。
C++中有类似的结构吗?
在 C++11 中,以下是合法的:
for (auto num : {1,4,5})
{
// loop body
}
{1,4,5}
这是一个实例std::initializer_list<int>
。
在 C++03 中,最接近的等价物是:
int values[] = {1,4,5};
for (int *p = values; p != values + sizeof(values) / sizeof(*values); ++p) {
int num = *p;
...
}
std::end
当您不再需要它时,已添加到 C++11 中的一个常见定义是:
template <typename T, size_t N>
T *endof(T (&ra)[N]) {
return ra + N;
}
然后你像这样使用它:
int values[] = {1,4,5};
for (int *p = values; p != endof(values); ++p) {
int num = *p;
...
}
所以对于 C++03,简短的回答是“不”,没有类似的结构。
Avector<int>
及其前向迭代器。
编辑:
伙计,我的 C++ 生锈了...
#include <iostream>
#include <vector>
int main(int argc, char *argv[])
{
int ints[] = {1, 4, 5};
std::vector<int> v (ints, ints + 3);
for (std::vector<int>::iterator i = v.begin(); i != v.end(); i++)
{
std::cout << *i << std::endl;
}
}
类似的事情是创建这个整数的 stl-Vector 并使用 for 循环和迭代器对其进行迭代。但我认为,在 C++ 中做这件事不是很实用。
Boost.Foreach是您正在寻找的东西。
正如 Ignacio 的回答中所述,来自标准模板库的向量是这里的方法。cplusplus.com条目中的第一个示例似乎是您想要的。