在c ++中使用map时,如何在指定范围内使用for循环

时间:2018-02-13 15:09:58

标签: c++

我希望在使用地图时使用带有迭代器的for循环,并希望在不是begin()结束end()的指定范围内运行它。我想将它用于从第3元素到第5元素的范围

2 个答案:

答案 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个元素的逻辑是错误的)