C++ 插入迭代器,算法使用

#include<iostream>
#include<vector>
#include<string>
#include<numeric>
#include<algorithm>
#include<iterator>
using namespace std;
bool isDivided2(int num)
{
    return num%2==0;
}
int main(int cnt,char *argv[])
{
    
    int l[5]={1,3,3,4,6};
    int findl[1]={10};
    cout<<accumulate(l,l+5,0)<<endl; //累加,第三个参数用于指定初始值和推断返回类型
    //输出17

    cout<<(find_first_of(&l[0],&l[5],&findl[0],&findl[1])!=&l[5])<<endl;;
    //输出0,即没找到

    int *endp=unique(l,l+5); //数组元素被移动,前N个都是唯一元素,返回N+1的位置
    for (int i=0;i<5;i++)
    {
        if(&l[i]==endp)
            cout<<"#";
        cout<<l[i];
    }
    cout<<endl;//输出1346#6 6被复制到前面,所以多出一个6
    
    cout<<"find_if Test\n";
    vector<int> lv(l,l+5);
    vector<int>::iterator itr=lv.begin();
    while ((itr=find_if(itr,lv.end(),isDivided2))!=lv.end()) //找出所有能被2整除的数
    {
        cout<<*itr;
        ++itr;
    }
    cout<<endl; //输出466

    //插入迭代器
    //back_inserter front_inserter inserter
    cout<<"back_inserter Test\n";
    vector<int> v;
    cout<<v.size()<<endl;//0
    back_insert_iterator<vector<int>> t=back_inserter(v);
    fill_n(back_inserter(v),10,1);//要动态增加迭代器大小,可以用back_inserter包装
    cout<<v.size()<<endl;//10
    
    cout<<"replace_copy Test\n";
    int nl[5];//l:[1,3,4,6,6]
    replace_copy(l,l+5,nl,3,1); //将源迭代器范围内元素复制到新范围内,值为3的替换为1
    for(int i=0;i<5;i++)
        cout<<nl[i];
    cout<<endl;//11466
    
    return 0;
}
原文地址:https://www.cnblogs.com/FlyCat/p/2832949.html