我有一个类C
没有定义 operator=
.我正在尝试使用这样的 vector :std::vector<std::pair<C,D>> vec;
.现在,我的问题是完成后我无法删除这对。编译器提示缺少 operator=
对于 C
.我不能有一个没有这个运算符的类的 vector 吗?我该如何解决这个问题?我无法将作业添加到 C
.这是我得到的错误:
error C2582: 'operator =' function is unavailable in 'C' C:\...\include\utility 196 1 my-lib
这是我的代码:
void Remove(const C& c)
{
auto i = cs_.begin();
while( i != cs_.end()) {
if (i->first == c) {
cs_.erase(i); // this is the problem
break;
}
i++;
}
}
哪里cs_
是:
std::vector<std::pair<C,D>> cs_;
最佳答案
原因是如果你删除一个不同于std::vector::end()
的位置,删除将重新分配你的对象。 .重新分配意味着复制。
请注意,不可复制类型的 vector 只能部分使用。在我们有emplace()
之前(pre-C++11) 这甚至是不可能的。如果你的类是可复制的,那你为什么不定义一个赋值运算符呢?
解决方法可以是智能指针(或普通指针) vector ,如 std::vector<std::unique_ptr<C>>
关于c++ - std::vector::erase(item) 需要为项目定义赋值运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21310646/