stl变易算法(三)

本文是关于STL变易算法的第三部分,详细介绍了fill、fill_n、generate、generate_n、remove_copy、remove_copy_if、remove、remove_if、unique_copy、unique、reverse、reverse_copy和rotate等算法的用法和实例,帮助理解C++中如何操作和变换容器内的元素。
摘要由CSDN通过智能技术生成

本篇接着前面stl变易算法(一)stl变易算法(二)继续讲述变易算法。这里将介绍完余下的变易算法,主要有:填充fill、n次填充fill_n、随机生成元素generate、随机生成n个元素generate_n、移除复制remove_copy、条件移除复制remove_copy_if、移除remove、条件移除remove_if、不连续重复元素复制unique_copy、剔除连续重复元素unique、元素反向reverse、反向复制reverse_copy及旋转rotate 。给出算法实现及实例。


填充fill

fill算法将同一个值填充到容器的一个或多个元素处,使用原型如下,将元素区间[first,last)上的元素全部填充为value值。

//fill算法函数的代码
template <class ForwardIterator, class T>
  void fill (ForwardIterator first, ForwardIterator last, const T& val)
{
  while (first != last) {
    *first = val;
    ++first;
  }
}
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;

void print(int x){
    cout << x << ' ';
}

int main(void){
    vector<int> v(5);
    fill(v.begin(), v.end(), 30);
    for_each(v.begin(), v.end(), print);
    cout << endl;
    return 0;
}

n次填充fill_n

类似于fill算法,fill_n算法可指定填充的元素个数。它的使用原型如下,将迭代器区间[first,first+n)个元素的值填充为value新值。

//fill_n函数的代码
template <class OutputIterator, class Size, class T>
  OutputIterator fill_n (OutputIterator first, Size n, const T& val)
{
  while (n>0) {
    *first = val;
    ++first; --n;
  }
  return first;     // since C++11
}
//测试用例
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;

void print(int x){
    cout << x << ' ';
}

int main(void){
    vector<int> v(8);
    fill(v.begin(), v.end(), 1);
    //前5个元素填充为2
    fill_n(v.begin(), 5, 2);
    for_each(v.begin(), v.end(), print);
    cout << endl;
    //全部填充为3
    fill_n(v.begin(), v.size(), 3);
    for_each(v.begin(), v.end(), print);
    cout << endl;
    return 0;
}

随机生成元素generate

generate算法为容器生成新元素,使用原型如下,将gen发生器生成的一系列元素存入迭代器区间[first,last)的元素区域处。

//generate算法函数代码
template <class ForwardIterator, class Generator>
  void generate ( ForwardIterator first, ForwardIterator last, Generator gen )
{
  while (first != last) {
    *first = gen();
    ++first;
  }
}
//测试用例
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;

//等差数列an+1=an + 3
class sequence{
public:
    int a;
    sequence(){a=0;}
    inline int operator()(){
        a=a + 3;
        return a;
    }
};

void print(int x){
    cout << x << endl;
}

int main(void){
    vector<int> v(10);
    sequence an;
    generate(v.begin(), v.end(), an);
    for_each(v.begin(), v.end(), print);
    cout << endl; 
    return 0;
}

随机生成n个元素generate_n

与generate算法类似,但generate_n算法限定了可填入容器的数值个数。它的使用原型如下,将迭代器区间[first,first+n)位置处的n个元素,填入由发生器gen生成的数值。

//generate_n算法函数代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值