关于c ++:如何在for循环中声明第二个迭代器?

How to declare a second iterator inside a for loop?

注意:我知道我可以将声明移到循环外。

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

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

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

我可以有类似的东西吗?

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


这是不可能的; C ++语法只是不承认这一点。 与之最接近的方法是在循环中附加一个范围:

1
2
3
4
5
6
7
{
    int x;
    float y;

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


不,您只能在其中声明一种类型的变量。 您可以使用std::pairstd::touple或某些类似的构造来解决此问题:

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


C ++允许您执行以下操作:

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

}

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


你不能

我的建议是将代码拆分成一个单独的函数,以保持可读性:

1
2
3
4
5
6
template<typename O, typename I>
O copy(I in, I end, O out) {
    for(; in != end; ++in, ++out)
        *out = *in;
    return out;
}

IMO,这比发明一个新的作用域或延长迭代器的生命周期要好得多,而且它使您思考代码是否可以通用。


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