c++ - “无法在当前范围内定义迭代器”错误
问题描述
我是一名新手 C++ 程序员,通过一个简单的问题将名称和分数对一起打印出来。在这里,我使用 astd::unordered_set
作为名称,使用矢量作为分数(接受重复的分数,但不接受名称),效果很好。
但是有一件事让我对结果感到困惑,那就是如果我尝试在 for 循环中初始化迭代器,编译器会给我一个错误,上面写着
迭代器“不能在当前范围内定义。”
这给出了错误:
for (int i = 0, std::unordered_set<std::string>::iterator it = names.begin();
i < names.size(); i++, it++)
{
std::cout << *it << ", " << scores[i] << '\n';
}
但移到循环之外,它工作正常:
std::unordered_set<std::string>::iterator it = names.begin();
for (int i = 0; i < names.size(); i++, it++)
{
std::cout << *it << ", " << scores[i] << '\n';
}
为什么这里的迭代器必须在循环外初始化呢?很抱歉这个简单的问题,我在别处搜索过,但没有找到明确的答案。
解决方案
在 C++for-
循环中
for ( declaration-or-expression(optional) ; declaration-or-expression(optional) ; expression(optional) )
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
初始化语句
- 表达式语句(可能是空语句“;”)
- 一个简单的声明,通常是一个带有初始化器的循环计数器变量的声明,但它可以声明任意多个变量 请注意,任何初始化语句都必须以分号结尾,这就是为什么它经常被非正式地描述为表达式或后面的声明用分号。
因此,您可以声明相同类型的变量;前任:
for (int i = 0, j = 1; ... ; i++, j++) {...}
^^^^^^^^^^^^^^^^
或初始化您之前声明的任何类型的变量。前任
std::unordered_set<std::string>::iterator it;
int i;
for (it = names.begin(), i = 0; i < names.size(); i++, it++) { ... }
^^^^^^^^^^^^^^^^^^^^^^^^^^^
因此,您的尝试失败了。
推荐阅读
- django - 在另一个列表 jinja 中搜索对象
- python - 为什么 scipy.interpolate.griddata 表现不佳?
- entity-framework-core - 仅更新 EF Core 中的一个字段
- node.js - 无法启动 webpack-dev-server - 未找到模块
- python - 子类化 argparse.ArgumentParser 正在产生奇怪的行为
- mysql - 查询两个不同的表而不重复
- python - 如何比较两个确切的展示位置列表?
- openlayers - 反转 Y 轴
- javascript - 如何自定义 jquery.formset.js django
- reactjs - React Hooks,尝试用更新的值替换对象的一部分