在与的for
循环中auto
,迭代器在上迭代unordered_map
。像这样:
using RuleIndex = std::unordered_map<uint, Symbol*>;
RuleIndex rule_index;
for(const auto & rule_pair : rule_index ) {
std::cout << rule_pair.first << ": ";
printList(rule_pair.second, 0);
std::cout << std::endl;
}
假设所有代码都正确定义,因为代码可以正常工作。我的问题是,如何排除第一次迭代?例如,该映射包含3行,并且当前循环迭代0、1、2。我只想迭代1和2。
bool is_first_iteration = true;
for(const auto & rule_pair : rule_index) {
if (std::exchange(is_first_iteration, false)) continue;
std::cout << rule_pair.first << ": ";
printList(rule_pair.second, 0);
std::cout << std::endl;
}
该std::exchange
调用将分配false
给is_first_iteration
并返回先前的值。这实际上是针对C ++ 14提出的论文中std::exchange
讨论的用例之一。该论文还显示了一个参考实现,如果您对C ++ 11感到困惑,可以使用它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句