从数组 C++ 中删除类
Posted
技术标签:
【中文标题】从数组 C++ 中删除类【英文标题】:Removing classes from an array C++ 【发布时间】:2021-09-18 19:05:50 【问题描述】:我有一个用于类的向量数组,并且我正在创建一个可以使用 std::remove() 从该数组中删除类的方法。问题是 Weapon(类)没有 std::remove 需要比较元素的运算符 ==。
代码:
class Weapon
public:
std::string name;
Weapon(std::string x)
name = x;
Weapon()
;
std::vector<Weapon> inventory;
void removeInventory(Weapon x)
if (inventorySize != 0)
auto deleteFromInc = inventory.erase(std::remove(std::begin(inventory), std::end(inventory), x), std::end(inventory));
if (deleteFromInc != std::end(inventory))
std::cout << "Item didn't delete\n";
else
if (heldWeapon.name == x.name)
heldWeapon = Weapon();
inventorySize = inventory.size();
std::cout << "Item deleted\n";
else
std::cout << "You have no items\n";
错误:
Rebuild started...
1>------ Rebuild All started: Project: rpag, Configuration: Debug Win32 ------
1>rpag.cpp
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30037\include\xmemory(1945,1): error C2678: binary '==': no operator found which takes a left-hand operand of type 'Weapon' (or there is no acceptable conversion)
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared\guiddef.h(192,15): message : could be 'bool operator ==(const GUID &,const GUID &)' [found using argument-dependent lookup]
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30037\include\xmemory(1945,1): message : while trying to match the argument list '(Weapon, const _Ty)'
1> with
1> [
1> _Ty=Weapon
1> ]
1>C:\Users\alber\source\repos\rpag\rpag\rpag.cpp(89): message : see reference to function template instantiation '_FwdIt std::remove<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<_Ty>>>,Weapon>(_FwdIt,const _FwdIt,const _Ty &)' being compiled
1> with
1> [
1> _FwdIt=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Weapon>>>,
1> _Ty=Weapon
1> ]
1>Done building project "rpag.vcxproj" -- FAILED.
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
这是我的第一个问题!我希望一切都清楚。
【问题讨论】:
请发帖minimal reproducible example。如果不使用operator==
,您打算如何比较两个Weapon
s?
问不同:给定武器x
,你怎么知道你想从向量中删除哪一个?
调用函数时
【参考方案1】:
std::remove 需要 operator== (这是 c++ 标准库的要求)。您可以将运算符添加到您的类中,或使用std::remove_if
- 它使用谓词 - 外部函数进行比较。
还有第三种方法:你可以手动从向量中擦除项目:for (...) erase ...
【讨论】:
你能举个例子吗? 发现了一些东西en.cppreference.com/w/cpp/algorithm/remove 早期:武器参考值;进入你的擦除: ... std::remove(std::begin(inventory), std::end(inventory), [reverence_value](const Weapon& item) return reference_value.name == item.name; ) 。 .. 让它工作:auto deleteFromInc = inventory.erase(std::remove_if(std::begin(inventory), std::end(inventory), [x](const Weapon& item) return x.name == item.name; ), inventory.end());你忘了使用 remove_if 哈哈。我在挠头 x)以上是关于从数组 C++ 中删除类的主要内容,如果未能解决你的问题,请参考以下文章
从文件中删除单词每次用户输入要删除的单词并将新数组写入新文件。 C++