如何在for循环中声明第二个迭代器
How to declare a second iterator inside a for loop?
注意:我知道我可以将声明移动到循环之外
我想在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::pair
、std::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,这比发明一个新的作用域或延长迭代器的寿命要好得多,而且它让你思考代码是否可以通用化。
相关文章:
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 声明 2 个变量
- 等待整个 omp 块完成,然后再调用第二个函数
- 我想在C++中读取一些多个字符,但它永远不会读取第二个字符
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 在内存不足之前,我可以声明多少个 const 变量?
- 将第二个 GATT 服务添加到 Movesense 容器
- 如何在 c++ 中根据第二个元素按降序对列表进行排序
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- 使第二个类的构造函数成为第一个类中的友元函数
- 为什么第二个代码给出了预期的结果,而第一个代码却没有?
- 为什么第一个代码块产生垃圾值,而第二个代码块将类成员的值相加?
- 打印无序映射的第二个元素,即集合
- 我有一个类,它创建了另一个类的实例.如何将变量通过第一个类传递到第二个类的实例化中?
- 需要使用模板查找数组的第二个最小和最小值
- 第二个指定的类型在模板typename声明中意味着什么
- 如何在for循环中声明第二个迭代器