簡體   English   中英

C++ 刪除向量中的對象並用新對象替換它們

[英]C++ Deleting objects in vector and replacing them by new objects

我想刪除向量內的對象,並在我的 SFML C++ 項目中用新對象替換它們。 當我運行程序時,舊對象消失了,沒有任何東西出現在它們的位置。 這是 createObjects function:

vector<Object> createObjects(float numberOfObjects) {
    vector<Object> v;
    v.push_back(Object());  
return v;
}

這是 main.cpp 中 while(window.pollEvent(event)) 中的代碼:

if ((event.type == Event::KeyPressed) && (event.key.code == Keyboard::Hyphen)) {
    numberOfObjects--;
    v.clear();
    vector<Object> v = createObjects(numberOfObjects);
}

if ((event.type == Event::KeyPressed) && (event.key.code == Keyboard::Equal)) {
    numberOfObjects++;
    v.clear();
    vector<Objectk> v = createObjects(numberOfObjects);
}

您根本沒有替換原始vector ,而是將createObjects()的 output 分配給立即超出 scope 的局部vector 您需要通過更改以下內容來擺脫您分配給的本地v變量:

vector<Objectk> v = createObjects(numberOfObjects);

對此:

v = createObjects(numberOfObjects);

像這樣:

if ((event.type == Event::KeyPressed) && (event.key.code == Keyboard::Hyphen)) {
    numberOfObjects--;
    v.clear();
    v = createObjects(numberOfObjects); // <-- HERE
}

if ((event.type == Event::KeyPressed) && (event.key.code == Keyboard::Equal)) {
    numberOfObjects++;
    v.clear();
    v = createObjects(numberOfObjects); // <-- HERE
}

話雖如此,在調用createObjects() clear() ) , vector在分配新數據時會自動清除其舊數據,例如:

if ((event.type == Event::KeyPressed) && (event.key.code == Keyboard::Hyphen)) {
    numberOfObjects--;
    v = createObjects(numberOfObjects); // <-- HERE
}

if ((event.type == Event::KeyPressed) && (event.key.code == Keyboard::Equal)) {
    numberOfObjects++;
    v = createObjects(numberOfObjects); // <-- HERE
}

更好的是,根本不需要重新創建vector ,例如:

if ((event.type == Event::KeyPressed) && (event.key.code == Keyboard::Hyphen)) {
    if (!v.empty()) {
        // to remove an element from the end...
        v.pop_back();
        // or, to remove an element from the front...
        v.erase(v.begin());
        numberOfObjects--;
    }
}

if ((event.type == Event::KeyPressed) && (event.key.code == Keyboard::Equal)) {
    // to add an element at the end...
    v.push_back(Object());
    // or, to add an element at the front...
    v.insert(v.begin(), Object());
    numberOfObjects++;
}

在這種情況下,您可以完全擺脫numberOfObjects並在需要時使用v.size()

暫無
暫無

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

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