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;
}