在这种情况下它们是等价的。[和 C++03 标准]。但是,如果 vectorTwo 在分配之前包含元素,则不同之处在于。然后
vectorTwo = vectorOne; // use operator=
// Any elements held in the container before the call
// are either assigned to or destroyed.
vectorTwo.assign() // any elements held in the container
// before the call are destroyed and replaced by newly
// constructed elements (no assignments of elements take place).
assign
是必需的,因为operator=
需要单个右手操作数,因此assign
在需要默认参数值或值范围时使用。可以通过首先创建合适的向量然后分配它assign
来间接完成什么:
void f(vector<Book>& v, list<Book>& l){
vector<Book> vt = (l.begin(), l.end());
v = vt;
}
然而,这可能既丑陋又低效(示例取自 Bjarne Stroustrup “The C++ ...”)
另请注意,如果 vector 不是同一类型,则还需要assign
which 允许隐式转换:
vector<int> vi;
vector<double> vd;
// ...
vd.assign( vi.begin(), vi.end() );