[英]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.