vector对象复制部分对象。
vector<int> arr1{1, 2, 3, 4, 5, 6};
1. vector<int> arr2(arr1.begin(), arr1.begin()+4);
2. vector<int> arr2;
copy(arr1.begin(), arr1.begin()+4, arr2.begin());
PS:注意点复制的区间都是[),左闭右开。所以上述都只复制到 {1,2,3,4}
vector的构造函数的参数都是迭代器,如果是原始数组指针也可以。
copy的参数默认都是迭代器。
#include<iostream>
#include<vector>
using namespace std;
int main(void)
{
vector<int> arr2;
int arr3[3] = {1,2,3};
//arr2.resize(3);
std::copy(arr3, arr3+2,arr2.begin());
for(auto x : arr2)
cout << x << ' ';
cout<< endl;
return 0;
}
这是特殊的例子arr2没有预分配大小,运行直接报段错误。
g++ (Ubuntu 7.2.0-8ubuntu3.2) 7.2.0 g++版本
在运行copy前先分配了内存即可。
resize()和reserve()
这里用的是resize()重新分配容器大小,并初始化对象。
其实也可以在构造函数传入vector的长度,并初始化对象。
在这里用reserve()函数尝试过,没有效果,reserve函数的作用是预分配n个int对象的内存。
reserve并不会初始化对象。所以在仅仅调用了reserve函数的vector对象调用copy将数据复制到
vector内存中,会导致复制失败。
reserve在vector不断递增的过程中的确可以减少反复申请扩大内存的数据移动等其他消耗的代价。
释放vector占用的内存
clear,erase函数都是销毁对象,但是并不释放vector占用的内存。
c++11提供了一个释放vector占用内存的函数shrink_to_fit()
也可用swap交换。
1. vector(arr2).swap(arr2);//效果和shrink_to_fit()函数一样
2. vector().swap(arr2);//将内存和数据全部释放。