我有一个关于我们可以存储在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();
}
Run Code Online (Sandbox Code Playgroud)
这可能会让你感到惊讶
v.push_back(A(20));
v.push_back(A(10));
std::sort(begin(v), end(v));
Run Code Online (Sandbox Code Playgroud)
矢量本身的某些方面需要可分配性,虽然我不知道,但是(我无法通过编译代码来判断,因为我的编译器在删除时不会抱怨operator=()).根据维基百科(参考'03标准的相关部分),元素必须是CopyConstructible和Assignable.
编辑:一天之后再回到这一点,在std::vector需要的时候看起来很明显Assignable- 任何时候都必须移动元素.例如,添加对v.insert()或的调用v.erase(),编译将失败.
| 归档时间: |
|
| 查看次数: |
2545 次 |
| 最近记录: |