C++地图和指针

C++ maps and pointers

本文关键字:指针 地图 C++      更新时间:2023-10-16

我每次都必须重新创建地图,而不仅仅是引用已经创建的地图。

这有效:

void render(Scene *scene) {
     map<std::string, Node*> _map = scene->getNodes(); // I don't want recreate the map every time. It is slowing down the render function :(
     for(auto outer_iter = _map.begin(); outer_iter!= _map.end(); ++outer_iter) {
         outer_iter->second->draw(*scene->getCamera());
     }
}

但这不...

 void render(Scene *scene) {
     //map<std::string, Node*> _map = scene->getNodes();
     for(auto outer_iter = scene->getNodes().begin(); outer_iter!= scene->getNodes().end(); ++outer_iter) {
         outer_iter->second->draw(*scene->getCamera());
     }
}

我不明白为什么会发生这种情况。

如何只引用 Scene 中的地图而不每次都重新创建它?

通过常量引用返回映射并更改为const map<std::string, Node*> &_map

class Scene{
    map<std::string, Node*> map;
public:
    const map<std::string, Node*>& getNodes() const{
        return map;
    }
}
void render(Scene *scene) {
     const map<std::string, Node*> &_map = scene->getNodes(); 
     for(auto outer_iter = _map.begin(); outer_iter!= _map.end(); ++outer_iter) {
         outer_iter->second->draw(*scene->getCamera());
     }
}

这将避免复制每个render调用,而只是在地图上操作 n