C++ vector拷贝使用总结

主要有以下几种方法

 

 
  1. vector<int> list;

  2. list.push_back(1);

  3. list.push_back(2);

 

一、初始化构造时拷贝

vector<int> tem(list);

这种拷贝,相当于复制了一份数据,list中的数据不变。

 

二、assign

  1. vector<int> temlist;

  2. temlist.assign(list.begin(), list.end());

     一样的复制了一份数据,list中的数据不变。

 

三、swap

  1. vector<int> temlist;

  2. temlist.swap(list);

  3. 将list中数据全部移到temlist中,此时list中为空了

1,swap操作交换两个相同类型的容器的内容,一般的容器(除array外),交换两个容器内容的操作会保证非常快,因为并没有交换元素本身,而只是交换了两个容器的内部数据结构。 

这里写代码片

可以看到,交换的是整个的内部数据结构,各元素原来所存储的值并没有发生改变,只是这些元素已经属于不用的容器了。所以容器中所存储的元素的内存地址也发生了改变。所以swap操作后,指向容器内部的迭代器、引用和指针都任然有效,原来绑定的是哪个元素现在绑定的还是哪个元素

这里写图片描述

可以看到,交换后,两个array交换了各个元素的值,即容器中所存的各个元素的内存地址并没有交换,只是交换了相应位置的元素的值,所以说swap两个array所需的时间和array中元素的数目成正比,同时,swap操作后,指向容器内部的迭代器、引用和指针都任然有效,原来绑定的是哪个元素现在绑定的还是哪个元素,只不过对应的元素值已经进行了交换。

2,和其它容器不同的是,对string调用swap会导致迭代器、引用和指针失效。因为string存储的是字符串,在string变量中真正存储字符串的是一个叫_Ptr的指针,它指向string所存储的字符串首地址,而字符串并没有固定地址,而是存储在一个临时内存区域中,所以当字符串发生改变时,会发生内存的重新分配,所以会导致迭代器、引用和指针失效。

 

 

 

四、insert

  1. vector<int> temlist;

  2. vector<int> temlist2;

  3. temlist2.push_back(2);

  4. temlist2.push_back(2);

  5. temlist.insert(temlist.end(), temlist2.begin(), temlist2.end());

      将temlist2中的数据,全部插入到temlist的末尾。相当于复制了一份数据

 

 

 


与赋值相关的操作符都作用于整个容器。除 swap 操作外,其他操作都可以用 erase 和 insert 操作实现(表 9.11)。赋值操作符首先 erases 其左操作数容器中的所有元素, 然后将右操作数容器的所有元素 inserts 到左边容器中:
c1 = c2; // replace contents of c1 with a copy of elements in c2
// equivalent operation using erase and insert
c1.erase(c1.begin(), c1.end()); // delete all elements in c1
c1.insert(c1.begin(), c2.begin(), c2.end()); // insert c2

赋值后,左右两边的容器相等:尽管赋值前两个容器的长度可能不相等,但赋值后两个容器都具有右操作数的长度。赋值和 assign 操作使左操作数容器的所有迭代器失效。swap操作则不会使迭代器失效。完成 swap 操作后,尽管被交换的元素已经存放在另一容器中,但迭代器仍然指向相同的元素。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值