C ++ 插入迭代器

Posted 小胖蛋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++ 插入迭代器相关的知识,希望对你有一定的参考价值。

 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 实现插入,它还带有第二个实参,指向插入起始位置的迭代器。

以上是关于C ++ 插入迭代器的主要内容,如果未能解决你的问题,请参考以下文章

C++ 列表插入迭代器

C++list

STL之list

为啥在达到容量后在向量中进行插入时,C++ 不处理迭代器?

deque迭代器失效的困惑?

使用迭代器在向量中插入下一个值以映射