图像处理程序类中的 std::map 帮助
我正在为引擎编写一个图像处理程序。到目前为止,一切进展顺利(我认为),但我需要删除图像方面的帮助。我有使用矢量
的经验,但没有使用地图
的经验。
图像处理程序有一个 std::map,它有 2 个元素:
std::map<std::string, SDL_Surface*> image_list_;
std::map<std::string, SDL_Surface*>::iterator it;
然后我的 ImageHandler 类中有 2 个方法:
void AddImage(std::string/*file_name*/);
void DeleteImage(std::string/*file_name*/);
这是这 2 个方法的核心:
bool ImageHandler::AddImage(std::string file_name)
{
SDL_Surface* temp = NULL;
if ((temp = Image::Load(file_name)) == NULL)
return false;
image_list_.insert(std::pair<std::string, SDL_Surface*>(file_name, temp));
SDL_FreeSurface(temp);
return true;
}
bool ImageHandler::DeleteImage(std::string file_name)
{
if (image_list_.empty()) return;
it = image_list_.find(file_name);
if (!it) return false;
image_list_.erase(it);
return true;
}
我还没有编译此代码,所以我不知道有任何语法错误。如果存在的话,你可以忽略它们。
我认为我的 DeleteImage
方法会将其从 map
中删除,但为了避免加载图像时出现内存泄漏,我需要这样做:
SDL_FreeSurface(SDL_Surface*);
所以我认为我需要访问迭代器的特定地图索引处的第二元素。到目前为止我做得对吗?我怎样才能做到这一点?
I am writing an imagehandler for an engine. So far it's going pretty good (I think) but I need help with deleting images. I have experience with vector
s but not with map
s.
The image handler has an std::map which has 2 elements:
std::map<std::string, SDL_Surface*> image_list_;
std::map<std::string, SDL_Surface*>::iterator it;
Then i have 2 methods in my ImageHandler class:
void AddImage(std::string/*file_name*/);
void DeleteImage(std::string/*file_name*/);
Here are the guts of these 2 methods:
bool ImageHandler::AddImage(std::string file_name)
{
SDL_Surface* temp = NULL;
if ((temp = Image::Load(file_name)) == NULL)
return false;
image_list_.insert(std::pair<std::string, SDL_Surface*>(file_name, temp));
SDL_FreeSurface(temp);
return true;
}
bool ImageHandler::DeleteImage(std::string file_name)
{
if (image_list_.empty()) return;
it = image_list_.find(file_name);
if (!it) return false;
image_list_.erase(it);
return true;
}
I haven't compiled this code so I am not aware of any syntax errors. If any exist you can just look past those.
I think my DeleteImage
method will remove it from the map
but to avoid memory leaks when it loads an image I need to do this:
SDL_FreeSurface(SDL_Surface*);
So I think I need to access an iterator's second element at a specific map index. Am I doing it right so far and how would I be able to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
像这样:
Like this:
是的,你是对的,你会
在将其从地图上删除之前这样做。
这将使该功能:
Yes you're right, you would do
before you erase it from the map.
That would make the function: