c++ - C ++删除向量中的对象并用新对象替换它们
问题描述
我想删除向量内的对象并用我的 SFML C++ 项目中的新对象替换它们。当我运行程序时,旧对象消失了,没有任何东西出现在它们的位置。这是 createObjects 函数:
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()
的本地。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
}
clear()
话虽如此,调用之前无需调用createObjects()
,avector
在分配新数据时会自动清除其旧数据,例如:
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()
在需要时使用。
推荐阅读
- c - 相同的 srand 种子在不同的计算机上产生不同的值
- javascript - 无法退出 do while 循环
- microsoft-graph-api - ServiceNow 的 Microsoft Graph API 错误
- python - 使用 Pytorch 重启时启动内核 Spyder 时发生错误
- bash - 而是在 bash 中通过所有文件在 for 循环中使用 awk - 仅在 awk 中执行某些操作
- python - 使用 Python 生成与 Java 兼容的 Diffie-Hellman
- python - 在另一个方法中定义一个方法而不具体提及类的一般方法?
- java - 在 Grpc 生成的 java 代码中设置嵌套属性值的更简单方法
- php - 使用 php 减去计算时,最后一个零被剥离
- hibernate - JPA / Hibernate 对雪花的支持