在矢量数组C++中使用算法库操作
Using an Algorithm library operation in a vector array C++
是否可以在向量数组中使用算法库操作?如果是这样,我应该怎么做,我可以在这里使用什么操作(例如remove_if(?目前,我正在运行一个 for 循环来计算我的分数,检查我是否击中了某个对象,如果它被击中,则删除它。这一切都很好用,但我以某种方式需要在这里使用算法库。(我对C++还是很陌生的(这是我到目前为止所拥有的:
std::vector<Coin*>coins;
coins.push_back(new Coin(&window_object[0], 60.0f, 60.0f, 350.0f, 425.0f, "res/coin.png"));
coins.push_back(new Coin(&window_object[0], 60.0f, 60.0f, 450.0f, 425.0f, "res/coin.png"));
。
for (size_t i = 0; i < coins.size(); i++) {
if (coins[i]->CheckCollect(player)) {
Coin* temp = coins[i];
coins.erase(coins.begin()+i);
delete temp;
score++;
}
}
编辑:代码错误类型
用标准库算法替换for
循环并不难。您正在迭代向量,执行一些工作,并可能擦除某些元素。这可以通过std::remove_if
来完成。
我将循环体移动到 lambda 表达式中,然后在erase/remove_if
中使用它:
auto my_predicate = [&](Coin *coin) {
if (coin->CheckCollect(player)) {
delete coin;
score++;
return true; // remove this element
}
return false; // don't remove
};
coins.erase(std::remove_if(coins.begin(), coins.end(), my_predicate), coins.end());
我不知道它是否是更干净的代码,但它的性能可能会更好。反复调用erase
的for
循环可能很昂贵,因为元素会多次移动以填充孔。使用std::remove_if
每个元素最多移动一次,并且只有一个erase
来固定矢量大小。
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 重载操作程序时出错>>用于类中的字符串 memebr
- 基于ELO的团队匹配算法
- C++选择排序算法中的逻辑错误
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- 对字符串进行位操作
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 我可以在 C++ 中的函数体之外进行操作吗?
- 在矢量数组C++中使用算法库操作
- 计算QuickSort算法中的基本操作
- 执行不同操作的模块函数的算法
- 用于创建、可视化和算法操作数据结构的C++库
- 排序算法不适用于使用指针操作的模板
- 使用STL算法进行矢量操作
- 用于排序/操作/排序的最佳替代算法
- 每个C++STL收集操作的算法效率
- 快速排序算法中的计数基本操作