在容器使用过程中,我们需要对一个容器进行操作然后在定义容器去装目标数据。这就需要目的端的容器必须够大,以使每个元素都能被赋值进来。
例如:
//源容器
int ia[10] = { 12,8,3,43,12,45,67,98,4,3 };
vector<int>vec(ia, ia + 10);
//目的容器
int ia2[10];
vector<int>ivec(10);
这就意味着我们必须总是传入某个固定大小的容器吗?当然不是,STL提供了三个所谓 insertion adapter
- back_inserter()会以容器的push_back()函数取代assignment运算符。对vector来说,这是比较合适的inserter。传入back_inserter的参数应该就是容器的本身
vector<int>ivec;
unique_copy(vec.begin(), vec.end(), back_inserter(vec));
- inserter()会以容器的insert()函数取代assignment运算符。inserter()接受两个参数:一个是容器,另一个是iterator,指向容器内的插入操作起点。以vector为例:
vector<int>vec1;
unique_copy(vec.begn(),vec.end(),inserter(vec1.begin(),vec1.end()));
- front_inserter()会以容器的push_front()函数取代assignment运算符。这个inserter只适用于list和adapter。
list<int>ilist1;
copy(ilist.begin(),ilist.end(),front_inserter(ilist1));
欲使用上诉这三种adapter,必须包含iterator头文件
#include<iterator>
注:这些iterator不能用在arry上。arry不支持元素插入操作。