C++ 顺序容器的赋值和swap

顺序容器的赋值和swap

现在有两个容器c1和c2,想要把c2的全部元素赋给c1

c1.erase(c1.begin(), c1.end());
c1.insert(c1.begin(), c2.begin(), c2.end());
顺序容器的赋值操作功能
c1=c2删除c1的所有元素,将c2的元素复制给c1。c1和c2的类型必须相同
c={a,b,c…}将c1中的元素替换为初始化列表中元素的拷贝(array不适用)
swap(c1,c2)交换c1和c2中的元素。c1和c2必须具有相同的类型。swap通常比从c2向c1拷贝元素快得多
c1.swap(c2)交换内容:调用完该函数后,c1中存放的是c2原来的元素,c2中存放的则是c1原来的元素。c1和c2的类型必须相同。该函数的执行速度通常要比将c2的元素复制到c1的操作快
assign操作不适用关联容器和array
c.assign(b,e)重新设置c的元素:将迭代器b和e标记的范围内所有的元素复制到c中。b和e必须不是指向c中元素的迭代器
c.assign(il)将容器c中的元素替换为初始化列表il中的元素
c.assign(n,t)将容器c重新设置为存储n个值为t的元素

使用assign

如果容器类型相同,元素类型相同,就可以直接使用赋值操作符(=)将一个容器赋给另一个容器。

如果在不同(相同)类型的容器内,元素类型不相同但是相互兼容,则赋值运算符必须使用assign函数。如:通过assign操作实现将vector容器中一段char*类型的元素赋给string类型的list容器。

list<string> names;
vector<const char*> oldstyle;
names = oldstyle; //错误,类型不匹配
names = oldstyle.assign(oldstyle.cbegin(), oldstyle.cend());

使用swap

swap交换两个相同类型容器的内容。调用swap之后,两个容器的元素会交换

vector<string> svec1(10);
vector<string> svec2(24);
swap(svec1, svec2);

调用swap之后,svec1会右24个元素,svec1有10个元素。swap没有交换元素本身,而是交换了两个数据结构,所以操作会很快。

  • 并且swap不对任何元素进行拷贝、删除或插入操作,除了array数组外。因此能在常数级时间内完成。
  • 迭代器不会失效, 假设现在有一个iter指向了svec1[3],在交换之后iter指向了svec2[3],变换了容器而已。
  • 虽然说可以调用成员函数的swap, s1.swap(s2),但是在泛型编程中,经常调用的是非成员函数的swap。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值