9.2.5 赋值和swap

  • 容器赋值运算
-- --
c1 = c2 将c1中元素替换成c2中元素
c1 = {a,b,c...} 将c1中的元素替换为列表中的元素(array不支持)
a.swap(b) 交换a和b元素
swap(a,b) 与上式等价
assign容器不适用于关联容器和array
seq.assign(b,e) 将seq中元素替换为迭代器b和e所表示的范围中的元素。迭代器b和e不能指向seq中元素
seq.assign(il) 将seq中的元素替换为初始化列表il中的元素
seq.assign(n,t) 将seq中的元素替换为n个值为t的元素
  • 使用assign(仅顺序容器) 赋值运算符要求左边和右边的运算对象具有相同的类型。顺序容器(除array外)还定义了一个名为assign的成员,允许我们从一个不同但相容的类型赋值,或者从容器的一个子序列赋值。assign操作用参数指定的元素(的拷贝)替换左边容器的所有元素
list<string> names;
vector<const_char*> oldstyle;
names = oldstyle; //错误:容器类型不匹配
names.assign(oldstyle.begin(), oldstyle.end()); //正确

list<string> slist1(1); //一个元素,为空string
slist1.assign(10, "Hiya"); //10个元素,每个都是Hiya
//等价于
slist1.clear();
slist1.insert(slist1.begin(), 10, "Hiya");
  • 使用swap

除array外,交换两个容器内容的操作会很快——元素本身未交换,swap只是交换了两个容器的内部数据结构,可以保证在常数时间内完成。

与其他容器不同,array在swap操作后,指针、引用、迭代所绑定的元素保持不变,但元素值已经与另一个array中对应的元素进行了交换。