我希望在使用地图时使用带有迭代器的for
循环,并希望在不是begin()
结束end()
的指定范围内运行它。我想将它用于从第3元素到第5元素的范围
答案 0 :(得分:6)
我想将它用于从第3个元素到第5个的范围 元件
由于std::map
的迭代器不是RandomAccessIterator
,而只是BidirectionalIterator
(您不能写.begin() + 3
),因此您可以使用std::next
目的:
for (auto it = std::next(m.begin(), 2); it != std::next(m.begin(), 5); ++it)
{
// ...
}
请记住 - 检查范围以确保迭代有效范围。
答案 1 :(得分:1)
对于极端情况,此代码应该是非常优化和安全的:
int count = 0;
for( auto it = m.begin(); it != m.end(); ++it ) {
if( ++count <= 3 ) continue;
if( count > 5 ) break;
// use iterator
}
但你以这种方式迭代std::map
的事实表明你很可能使用了错误的容器(或者你的第3到第5个元素的逻辑是错误的)