gak*_*gak 1 c++ iterator stl map
我已经制作了一个滚动/环绕项目地图的方法,这样如果到达目的地,该方法将返回第一个项目,反之亦然.
有更简洁的方法吗?
MyMap::const_iterator it = myMap.find(myKey);
if (it == myMap.end())
return 0;
if (forward) {
it++;
if (it == myMap.end()) {
it = myMap.begin();
}
} else {
if (it == myMap.begin()) {
it = myMap.end();
}
it--;
}
Run Code Online (Sandbox Code Playgroud)
您可以将环绕行为直接实现到一个新的迭代器类中 - 模板化为一些实际迭代器的包装器,它为调用者提供了一个更优雅的接口(以便其递增和递减运算符自动执行环绕) .
另外 - 小心空容器.当容器中没有元素时,您不希望"环绕".