gpt4 book ai didi

c++ - std::vector::erase(item) 需要为项目定义赋值运算符?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:22 24 4
gpt4 key购买 nike

我有一个类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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com