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

How to declare a second iterator inside a for loop?

本文关键字:声明 第二个 迭代器 循环 for      更新时间:2023-10-16

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

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

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

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

可以给我一些类似的东西吗:

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

这是不可能的;C++语法就是不承认这一点。最接近这一点的方法是在循环中添加一个额外的作用域:

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

不,您只能在其中声明一种类型的变量。你可以用std::pairstd::touple或类似的结构来解决这个问题:

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

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

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

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

不,这是不可能的,它们必须是相同的类型。

你不能。

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

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

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

相关文章: