I have a vector of Scenes, vector<Scene>. What is the correct way to iterate over the elements, as reference or not?

For example this:

BOOST_FOREACH(Scene scene, mScenes)
{
       .....
}

Does the macro copy the Scene for each iteration over the vector, or does it use a reference behind the scenes?

So is it any different from this:

BOOST_FOREACH(Scene& scene, mScenes)
{
       .....
}
有帮助吗?

解决方案

BOOST_FOREACH behaves exactly as you tell him, by value, reference or const reference

其他提示

Your first example does copy each Scene. Most likely, you want the second. With the first, you can modify scene and the vector will be unaffected. If you're not modifying the vector, you should use const Scene& scene. If you are, use Scene &.

Note that with C++11 you don't need to use BOOST_FOREACH (excepted with some boost libs that return a pair of iterators).

for(const Scene& scene: mScenes){}

The same rules apply as for BOOST_FOREACH : you most likely want to use const &, rarely &, and never copy.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top