看到两个list赋值 用Swap 函数,没有直接用=, 看下面原来Swap 有时候更高效。

看到两个list赋值 用Swap 函数,没有直接用=, 看下面原来Swap 有时候更高效。

http://www.vckbase.com/module/articleContent.php?id=4726‘’


赋值和swapc1 = c2;// 将c1的内容替换为c2中元素的拷贝c1 = {a, b, c};// 赋值后, c1的大小为3array也可以整体赋值,这正是array与内置数组的不同之处; array在赋值时,赋值符号左右两边的对象必须具有相同的类型。1array a1 = {1, 2, 3, 4, 5}; array a2 = {6, 7, 8, 9, 10}; a1 = a2; // a1中元素将替换为a2中元素的拷贝 但不能将一个花括号列表赋值数组:1a2 = {0}; // error容器的赋值运算有如下几种:1c1 = c2;1c = {a, b, c};1swap(c1, c2); 将c1中元素替换为c2中的元素,c1和c2必须具有相同的类型1c1.swap(c2); swap通常比从c2向c1拷贝元素快的多。1 1// assign操作不适用于关联容器和array1seq.assign(b, e); 将seq中元素替换为迭代器b和e所指向的范围之内的元素,但是b和e不能指向seq1seq.assign(il); 将seq中元素替换为初始化列表il中的元素1seq.assign(n, val); 将seq中元素替换为n个值为val的元素赋值相关运算会导致指向左边容器内部的迭代器、引用和指针失效。而swap操作将容器内容交换不会导致失效。(array和string的情况除外)使用swapswap操作的是两个相同类型容器的内容。除array外,交换两个容器内部的操作保证会很快,元素本身并未交换,swap只是交换了两个容器内部的数据结构。元素不会被移动,这意味着,string除外,指向容器的迭代器、引用和指针在swap操作后不会失效。但在swap之后,这些元素已经属于不同的容器了。例如有两个容器vec1和vec2,假定iter1在swap前指向vec1[3], 在swap之后它指向vec2[3]。 但是,对一个string调用swap会导致迭代器、引用和指针失效。swap两个array会真正的交换他们的元素,所以交换array所需要的时间和array的元素数目成正比。新的标准库中,容器既提供成员函数版本的swap,也提供非成员函数版本的swap,我们应该习惯使用非成员版本的swap。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值