主要有以下几种方法
-
vector<int> list;
-
list.push_back(1);
-
list.push_back(2);
一、初始化构造时拷贝
vector<int> tem(list);
这种拷贝,相当于复制了一份数据,list中的数据不变。
二、assign
-
vector<int> temlist;
扫描二维码关注公众号,回复: 2662152 查看本文章 -
temlist.assign(list.begin(), list.end());
一样的复制了一份数据,list中的数据不变。
三、swap
-
vector<int> temlist;
-
temlist.swap(list);
-
将list中数据全部移到temlist中,此时list中为空了
1,swap操作交换两个相同类型的容器的内容,一般的容器(除array外),交换两个容器内容的操作会保证非常快,因为并没有交换元素本身,而只是交换了两个容器的内部数据结构。
可以看到,交换的是整个的内部数据结构,各元素原来所存储的值并没有发生改变,只是这些元素已经属于不用的容器了。所以容器中所存储的元素的内存地址也发生了改变。所以swap操作后,指向容器内部的迭代器、引用和指针都任然有效,原来绑定的是哪个元素现在绑定的还是哪个元素
可以看到,交换后,两个array交换了各个元素的值,即容器中所存的各个元素的内存地址并没有交换,只是交换了相应位置的元素的值,所以说swap两个array所需的时间和array中元素的数目成正比,同时,swap操作后,指向容器内部的迭代器、引用和指针都任然有效,原来绑定的是哪个元素现在绑定的还是哪个元素,只不过对应的元素值已经进行了交换。
2,和其它容器不同的是,对string调用swap会导致迭代器、引用和指针失效。因为string存储的是字符串,在string变量中真正存储字符串的是一个叫_Ptr的指针,它指向string所存储的字符串首地址,而字符串并没有固定地址,而是存储在一个临时内存区域中,所以当字符串发生改变时,会发生内存的重新分配,所以会导致迭代器、引用和指针失效。
四、insert
-
vector<int> temlist;
-
vector<int> temlist2;
-
temlist2.push_back(2);
-
temlist2.push_back(2);
-
temlist.insert(temlist.end(), temlist2.begin(), temlist2.end());
将temlist2中的数据,全部插入到temlist的末尾。相当于复制了一份数据