当迭代器不是随机访问时,如何在映射结束之前停止迭代"n"?

use*_*287 3 c++ iterator map

我想用迭代器遍历C++中的映射,但不是一直到最后.问题是即使我们可以使用迭代器进行基本操作,我们也无法使用整数添加或比较迭代器.我该如何写下面的说明?(final是地图; window,整数)

for (it=final.begin(); it!=final.end()-window; it++)
Run Code Online (Sandbox Code Playgroud)

Bo *_*son 5

你不能直接从map迭代器中减去,因为它是一个昂贵的操作(实际上做了 - 所需的次数).如果你真的想要这样做,你可以使用标准库函数'advance'.

map<...>::iterator end = final.end();
std::advance(end, -window);
Run Code Online (Sandbox Code Playgroud)

这会让你结束你的窗口.

  • 显然,你在进入循环之前计算过一次*.没意义在每次迭代时计算它:) (2认同)