341*_*008 7 c++ operators stdvector visual-studio-2012
我有一个C
没有定义的类operator=
.我试图使用这样的矢量:std::vector<std::pair<C,D>> vec;
.现在,我的问题是,在我完成它之后,我无法擦掉它.编译器会抱怨缺少operator=
的C
.我可以没有没有此运算符的类的向量吗?我该如何解决这个问题?我无法添加作业C
.这是我得到的错误:
error C2582: 'operator =' function is unavailable in 'C' C:\...\include\utility 196 1 my-lib
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
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++;
}
}
Run Code Online (Sandbox Code Playgroud)
在哪里cs_
:
std::vector<std::pair<C,D>> cs_;
Run Code Online (Sandbox Code Playgroud)
原因是如果擦除不同的位置,擦除将重新分配您的对象std::vector::end()
.重新分配意味着复制.
请注意,不可复制类型的矢量只能部分使用.在我们emplace()
(C++之前的11版)之前,它甚至是不可能的.如果您的类是可复制的,那么为什么不定义赋值运算符呢?
解决方法可能是智能指针(或普通指针)的矢量 std::vector<std::unique_ptr<C>>
归档时间: |
|
查看次数: |
1570 次 |
最近记录: |