How to declare a second iterator inside a for loop?
注意:我知道我可以将声明移到循环外。
我想在
1 2 3 | for ( int x = 0, int y = 0 ; ; ) { } |
,但这不起作用,因为我不能在逗号
我可以有类似的东西吗?
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;;) { } } |
不,您只能在其中声明一种类型的变量。 您可以使用
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,这比发明一个新的作用域或延长迭代器的生命周期要好得多,而且它使您思考代码是否可以通用。
不,那是不可能的,它们都必须是同一类型。