C++ 如何在for循环中声明第二个迭代器? 注意:我知道我可以将声明移出循环。

C++ 如何在for循环中声明第二个迭代器? 注意:我知道我可以将声明移出循环。,c++,for-loop,C++,For Loop,我想在for循环中声明几个变量: for ( int x = 0, int y = 0 ; ; ) { } ,但这不起作用,因为我无法在逗号,后指定类型。在这种情况下,在循环外删除第二个int或声明y可以解决问题,但是如果我想在循环内声明这两个变量,并且还具有不同的类型,该怎么办 能给我一些类似于: for ( int x = 0, float y = 0 ; ; ) { } 这是不可能的;C++语法就是不承认。最接近这一点的方法是在循环周围放置一个额外的作用域: { int x;

我想在
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;;) {
    }
}

这是不可能的,;C++语法就是不承认。最接近这一点的方法是在循环周围放置一个额外的作用域:

{
    int x;
    float y;

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

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

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

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

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

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

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

你不能

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

template<typename O, typename I>
O copy(I in, I end, O out) {
    for(; in != end; ++in, ++out)
        *out = *in;
    return out;
}
模板
O复制(输入、结束、输出){
for(;in!=end;++in,++out)
*out=*in;
返回;
}
在我看来,这比发明一个新的作用域或延长迭代器的生命周期要好得多,而且它让你思考代码是否可以被泛化。

你不能

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

template<typename O, typename I>
O copy(I in, I end, O out) {
    for(; in != end; ++in, ++out)
        *out = *in;
    return out;
}
模板
O复制(输入、结束、输出){
for(;in!=end;++in,++out)
*out=*in;
返回;
}

依我看,这比发明一个新的作用域或延长迭代器的生命周期要好得多,而且它让你思考代码是否可以被泛化。

C++允许你这样做:

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

}

(struct{int x;float y;}s;s.xC++允许您执行以下操作:

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

}

(struct{int x;float y;}s;s.xpossible duplicate of mable duplicate of mable duplicate of mable duplicate of我还将提到
pair
/
touple
。我仍然要提醒的是,这似乎是
for
语句的奇怪用法。如果其中一个变量不是专门用于约束迭代的,那么它不应该是m我同意,虽然这是一种方式,但它不是我通常使用的方式。它无助于提高循环体的可读性,而且在浏览代码时,构造似乎非常不寻常。我会采用@larsmans提出的解决方案。你也可以用成员声明结构类型。请看我的答案。我还打算注意
pair
/
touple
。我仍然要提醒大家,这似乎是
for
语句的一种奇怪用法。如果其中一个变量不是专门用于约束迭代的,就不应该将其混入
for
。我同意,尽管这是一种方法,但它不是我通常使用的方法。它没有帮助由于循环体和构造的可读性,在浏览代码时似乎非常不寻常。我会使用@larsmans提出的解决方案。您也可以使用成员声明结构类型。请参阅我的答案。正如其他答案中所指出的,您可以通过在for语句中声明结构类型或使用其他聚合类型(如s)来实现td::tuple。@bames53:是的,但严格来说,这不会给您提供一个以上的变量,其作用域仅限于
for
循环。正如其他答案所指出的,您可以通过在for语句中声明一个结构类型,或使用另一个聚合类型,如std::tuple。@bames53:是的,但严格来说,这不会给您提供一个以上的变量le,范围限制为
for
循环。