我有一个关于我们可以存储在 vector 中的类的问题。 可以存储在 vector 中的要求是什么? 似乎这样的类必须有赋值运算符。但我不确定是否仅此而已。
让我举个例子。 A 类有 const int 成员。如果我不写 operator =,它就不会编译。但是在这个例子中,这个操作符什么都不做。该程序正确显示 10 和 20。看起来 operator = 是必需的,但实际上并没有使用。
#include <iostream>
#include <vector>
class A {
public:
A(int a) : a_(a) {}
A& operator =(const A& a2) { return *this;} // Without this, compile fails.
void print() const {
std::cerr << a_ << std::endl;
}
private:
const int a_;
};
int main(int argc, char** argv) {
std::vector<A> v;
v.push_back(A(10));
v.push_back(A(20));
for (const A& a : v) a.print();
}
最佳答案
这可能会让您大吃一惊:
v.push_back(A(20));
v.push_back(A(10));
std::sort(begin(v), end(v));
vector 本身的某些方面需要可分配性,虽然我不知道,但我无法通过编译你的代码来判断,因为当我删除 operator= 时我的编译器不会提示()
)。根据Wikipedia (引用了 '03 标准的相关部分),元素必须是 CopyConstructible
和 Assignable
。
编辑: 一天后回到这个问题上,当 std::vector
需要 Assignable
时,这似乎非常明显——任何时候它必须四处移动元素。例如,添加对 v.insert()
或 v.erase()
的调用,编译将失败。
关于c++ - 为什么 std::vector 需要 operator =,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17760580/