1.C++中的迭代器一般是不会改变容器的大小的,只是用于读取或者修改容器中元素的值。而插入迭代器可以用于向容器中添加元素。
2.
std::vector<int> vec;
auto it = std::back_inserter(vec);//back_inserter用于创建一个vec容器的插入迭代器
*it = 42;//给创建的插入迭代器赋值相当于调用push_back向容器中添加元素
for(int i = 0;i<vec.size();i++){
cout << vec[0] << endl;
}
3.插入迭代器和fill_n算法结合使用
fill_n(dest,n,val)。fill_n算法用于向容器中dest位置开始添加n个val元素。
如果dest为一个容器的起始位置,而容器的长度小于n,那么代码的迭代器会越界导致报错,如:std::vector<int> vec;std::fill_n(vec.begin(),10,0);
fill_n的算法内部起始是给dest开始的迭代器和后面n-1个迭代器指向的值赋值为val。
这里如果把dest替换为插入迭代器,那么相当于每次都调用vec的push_back方法插入值val,所以就不会产生越界报错的问题:std::vector<int> vec;std::fill_n(std::back_inserter(vec),10,0);
4.插入迭代器和replace_copy结合使用
replace迭代器用于将容器中指定值替换为另外一个值,它是在原容器中操作,如果我们希望原容器中的值不变,执行替换后生成一个新的容器,这个新容器中执行了替换操作,那么就要使用replace_copy算法:
std::vector<int> vec{0,2,2,2,3,4,5,6,7};
std::vector<int> vec{0,2,2,2,3,4,5,6,7};
std::vector<int> vec1;
std::replace_copy(vec.begin(),vec.end(),std::back_inserter(vec1),2,9);
for(auto item:vec1){
cout<<item<<endl;
}