[英]How can I switch an element from a vector to another in C++?
昨天我開始學習C ++,因此在這方面我很新。 (我來自C#)我正在嘗試使用兩個向量(活動和不活動)創建一個池,因此當我需要一個元素時,可以將其從不活動的向量中取出並放入活動的向量中。
我想我必須從不活動狀態中刪除指針,但將元素保留在內存中,對嗎? 我怎樣才能做到這一點?
到目前為止,這是In的功能:
SpritePool::SpritePool(const char *p)
{
path = p;
}
CCSprite SpritePool::GetSprite(){
while(poolVectorInactive.size == 0){
AddSprite();
}
}
CCSprite SpritePool::AddSprite(){
CCSprite *s = CCSprite::create(path);
poolVectorInactive.push_back(*s);
return *s;
}
嘗試這樣的事情:
#include <algorithm>
#include <vector>
std::vector<CCSprite*>::iterator it = std::find_if(inactive.begin(), inactive.end(), [](CCSprite* sprite) { /* put your vector search logic (returning bool) here */ });
if (it != inactive.end())
{
active.push_back(*it);
inactive.erase(it);
delete *it;
}
請注意,它使用lambda表達式(例如,請參見http://www.cprogramming.com/c++11/c++11-lambda-closures.html ),因此您需要兼容C ++ 11的編譯器。 如果您負擔不起這種奢侈,請編寫如下函數:
bool matcher(CCSprite* sprite)
{
/* code here */
}
並更改此部分:
std::vector<CCSprite*>::iterator it = std::find_if(inactive.begin(), inactive.end(), matcher);
另外,如果可以,請盡量不要使用原始指針。 將它們存儲在例如unique_ptr
或shared_ptr
,因此您不必手動刪除它們。 這樣可以節省一些泄漏和頭痛。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.