常用的泛型算法

 

template<class InputIterator, class Type>

   InputIterator find(

      InputIterator _First,

      InputIterator _Last,

      const Type& _Val

   );查找成功返回指向Val的迭代器,失败返回一个越界的迭代器_Last

所以检查是否和_Last相等就可以判断是否找到

find(beg,end,val)// 查找失败返回end

count(beg,end,val)//返回val出现的次数的计数

accumulate(beg,end,val);包含在<numeric>头文件中,begend是两个迭代器,表示的是范围,val是一个初值,表示begend中的元素相加后加上val

例如:int sum=accumulate(vec.begin(),vec.end(),42); 表示vec中的元素之和加上42.

 

 

fill(beg,end,val)begend中间写入val   只会对输入范围内已存在的元素进行写入操作

 

fill_n(beg,count,val)beg开始写入countval 不检查写入操作的算法,不安全,

 

back_inserter(vec)包含在<iterator>中,在vec容器中插入。创建使用push_back实现插入操作的容器。

fill_n结合使用的例子

 fill_n(back_inserter(vec),10,.0)vec中插入100,相当于vector中的push_back();

 

front_inserter()使用push_front实现插入

inserter()使用insert实现插入操作,除了所关联的容器外,inserter还带有第二个实参,指向插入起始位置的迭代器。

 

unique(beg,end)去除掉重复的元素,(没有删除)返回的迭代器指向超出无重复的元素范围末端的下一位置。空间大小没变化,只是把相邻的元素覆盖掉了

    vector<string>vec;

    string str="fox jumps over quick red red slow the the turtle";

    string word;

    istringstream stream(str);

    while(stream>>word)

    {

        vec.push_back(word);

    }

    vector<string>::iterator end_unique=unique(vec.begin(),vec.end());

    //将无重复的元素复制到序列的前端,相邻的元素被覆盖掉,

    vec.erase(end_unique,vec.end());

 

replace(beg,end,val1,val2)查找等于val1的替换为val2.

 replace_copy(beg,end,vec,val1,val2) 查找等于val1的替换为val2.插入vec中,而不修改begend中间的值,

template<class InputIterator, class OutputIterator, class Type>

   OutputIterator replace_copy(

      InputIterator _First,

      InputIterator _Last,

      OutputIterator _Result,

      const Type& _OldVal,

      const Type& _NewVal

   );

 

 

template<class InputIterator, class OutputIterator>
    
   OutputIterator copy(
    
      InputIterator _First, 
    
      InputIterator _Last, 
    
      OutputIterator _DestBeg
    
   );
    

 

template<class InputIterator, class OutputIterator>
    
   OutputIterator unique_copy(
    
      InputIterator _First, 
    
      InputIterator _Last, 
    
      OutputIterator _Result
    
   );
    
template<class InputIterator, class OutputIterator, class BinaryPredicate>
    
   OutputIterator unique_copy(
    
      InputIterator _First, 
    
      InputIterator _Last, 
    
      OutputIterator _Result,
    
      BinaryPredicate _Comp,
    
   );
    

利用copy算法将一个文件的内容写到标准输出中

ofstream outfile;

    string filename="C:\\Users\\Administrator\\Desktop\\file.txt";

 

    ifstream inf(filename.c_str()) ;

    istream_iterator<string>infile(inf),end_file;

   

 

    outfile.open(filename.c_str(),ios_base::app);

    ostream_iterator<string>output(cout,":\t\n ");

    copy(infile,end_file,output);

   

 

 

你可能感兴趣的:(常用的泛型算法你)