如何在for循环中声明第二个迭代器?

时间:2012-01-04 14:32:35

标签: c++ for-loop

注意:我知道我可以在循环外移动声明。

我想在for循环中声明几个变量:

for ( int x = 0, int y = 0 ; ; )
{
}

,但这不起作用,因为我无法在逗号,之后指定类型。在这种情况下,删除第二个int或在循环外声明y将解决问题,但是如果我想在循环内声明两个变量并且还有不同的类型呢?

我可以拥有类似的内容:

for ( int x = 0, float y = 0 ; ; )
{
}

5 个答案:

答案 0 :(得分:8)

这是不可能的; C ++语法不会承认它。你可以得到的最接近的是在循环周围增加一个范围:

{
    int x;
    float y;

    for (x=0, y=0;;) {
    }
}

答案 1 :(得分:5)

不,你只能在那里声明一种类型的变量。您可以做的是使用std::pairstd::touple或类似的构造解决此问题:

for(std::pair<int, float> p = std::make_pair(0, 0.0f);; )
{
    p.first++;
    p.second *= 0.5f;
}

答案 2 :(得分:2)

C ++允许你这样做:

for( struct {int x; float y;} s; s.x<10; s.x++,s.y*=2.0f) {

}

MSVC有一个错误,它不允许这样做,但更多符合标准的编译器允许它。

答案 3 :(得分:0)

不,这是不可能的,它们都必须属于同一类型。

答案 4 :(得分:0)

你不能。

我的建议是将代码内部拆分为单独的函数以保持其可读性:

template<typename O, typename I>
O copy(I in, I end, O out) {
    for(; in != end; ++in, ++out)
        *out = *in;
    return out;
}

IMO,这比发明新作用域或延长迭代器的生命周期要好得多,而且它会让你考虑代码是否可以通用化。