用2个循环反向迭代?

jma*_*erx 2 c++ vector

基本上我想反向迭代2 std :: vectors.图层具有形状向量.

通常我可以这样做:

for(int i = 0; i < layers.size(); ++i)
{
   for(int j = 0; j < layers[i].shapes.size(); ++j)
   {
      layers[i].shapes[j].dosomething();
   }
}
Run Code Online (Sandbox Code Playgroud)

但是现在我需要反向迭代遍历向量,因此需要使用反向迭代器,但这将如何工作?由于迭代器类似于每个迭代器,我如何访问正在迭代的当前层的当前形状?谢谢

sje*_*397 5

简单的方法:

for(int i = layers.size() - 1; i >= 0; --i)
{
   for(int j = layers[i].shapes.size() - 1; j >= 0; --j)
   {
      layers[i].shapes[j].dosomething();
   }
}
Run Code Online (Sandbox Code Playgroud)

"正确"的方式:

for(vector<Layer>::reverse_iterator i = layers.rbegin(); i != layers.rend(); ++i)
{
   for(vector<Shape>::reverse_iterator j = i->shapes.rbegin(); j != i->shapes.rend(); ++j)
   {
      j->dosomething();
   }
}
Run Code Online (Sandbox Code Playgroud)