簡體   English   中英

如何在C ++中將元素從向量切換到另一個?

[英]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_ptrshared_ptr ,因此您不必手動刪除它們。 這樣可以節省一些泄漏和頭痛。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM