C++ 语言提供了三种插入器,其差别在于插入元素的位置不同。
(1)back_inserter,创建一个使用push_back 实现插入的迭代器。
(2)front_inserter,创建一个使用push_front实现的插入迭代器。
(3)inserter,使用insert实现的插入,此外还带有第二个实参:指向插入起始位置的迭代器。
back_inserter 是一种迭代器适配器,它与容器适配器一样,是以一个容器对象作为实参,生成一个适应期实参行为的迭代器。举例说明其用法。
1 vector<int> vec; // empty vector 2 fill_n(back_inserter(vec),10,0); // appends 10 elements to vec
back_inserter 生成一个绑定在 vector 容器上的插入迭代器。在试图通过这个迭代器给元素赋值时,赋值运算将调用push_back 在容器中添加一个具有指定值的元素。
算法中的copy 函数。copy函数带有三个迭代器参数,头两个指定输入范围,第三个则指向目标序列的一个元素。例如:
1 vector<int> vec;//empty vector 2 // copy elements from ilst into ivec 3 copy(ilst.begin(),ilst.end(),back_inserter(vec) );
copy 从输入范围中读取元素,然后将它们赋值给目标vec
replace 与replace_copy 算法:replace 算法有四个实参:一对指定输入范围的迭代器和两个值,后两个值是第一个值的元素替换成第二个。
replace_copy 算法不改变原来序列的元素,它有五个实参,第三个迭代器实参,指定保存调整后序列的保存位置。
replace(ilst.begin(),ilst.end(),5,4);//replace any element with value of 5 by 4 //creat empty vector to hold the replacement vector<int> ivec; replace_copy(ilst.begin(),ilst.end(),back_inserter(ivec),5,4);
front_inserter 同 back_inserter 类似,该函数创建一个迭代器,调用它所关联的容器的push_front 成员函数代替赋值运算。
注:当front_inserter 的关联容器 提供push_front 操作时才能使用front_inserter。在vetor 容器使用会出现错误。
inserter 函数带有两个实参:所关联的容器和指示插入起始位置的迭代器。
vector<int>::iterator it = ivc.begin(); replace_copy(ilst.begin(),ilst.end(),inserter(ivec,it),5,4);
在创建 inserter 时,应指明新元素在何处插入。inserter 函数总是 在它的迭代器实参所标明的位置前面插入新元素。
小结:三种插入迭代器的区别:在插入的位置不同。
back_inserter 使用push_back 实现在容器末端插入,front_inserter 使用push_front 实现在容器前端插入,inserter 使用insert 实现插入,它还带有第二个实参,指向插入起始位置的迭代器。