STL algorithm算法generate和generate_n(22)

今后的stl算法部分就不贴cpluplus的原文了,简要的介绍为主。


generate原型:

std::generate

template <class ForwardIterator, class Generator>
  void generate (ForwardIterator first, ForwardIterator last, Generator gen);
该函数是使用gen函数产生的值填充范围内元素的值。

其行为类似如下:

1
2
3
4
5
6
7
8
template <class ForwardIterator, class Generator>
  void generate ( ForwardIterator first, ForwardIterator last, Generator gen )
{
  while (first != last) {
    *first = gen();
    ++first;
  }
}
 
参数gen是一个接受空参数,并返回一个对应的值的函数或者是函数对象之类的。
一个简单的例子:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
static int i=0;
int addone(){
    return i++;
}
void generate1(){
    vector<int> vi(10);
    cout<<"at first,vi=";
    for_each(vi.begin(),vi.end(),[](int i){cout<<i<<" ";});
    cout<<endl;
    generate(vi.begin(),vi.end(),addone);
    cout<<"after generate(vi.begin(),vi.end(),addone);\n vi=";
    for_each(vi.begin(),vi.end(),[](int i){cout<<i<<" ";});
    cout<<endl;


}

运行截图:


可以看到,使用generate之后,vector里面的值被填充了!




generate_n原型:

std::generate_n

template <class OutputIterator, class Size, class Generator>
  OutputIterator generate_n (OutputIterator first, Size n, Generator gen);

该函数是使用gen的返回值填充指定位置及之后的n个元素的函数。

其行为类似:

1
2
3
4
5
6
7
8
template <class OutputIterator, class Size, class Generator>
  void generate_n ( OutputIterator first, Size n, Generator gen )
{
  while (n>0) {
    *first = gen();
    ++first; --n;
  }
}
 
一个简单的例子:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void generaten(){
    vector<int> vi(10);
    cout<<"at first,vi=";
    for_each(vi.begin(),vi.end(),[](int i){cout<<i<<" ";});
    cout<<endl;
    int i=0;
    generate_n(vi.begin(),7,[&i](){return i++;});
    cout<<"after generate(vi.begin(),7,[&i](){return i++;});\n vi=";
    for_each(vi.begin(),vi.end(),[](int i){cout<<i<<" ";});
    cout<<endl;


}

运行截图:

可以看到,只填充了7个元素!


——————————————————————————————————————————————————————————————————

//写的错误或者不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。

转载请注明出处:http://blog.csdn.net/qq844352155

author:天下无双

Email:coderguang@gmail.com

2014-9-13

于GDUT

——————————————————————————————————————————————————————————————————




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STL(标准模板库)提供了许多有用的算法函数,包括以下内容: 1. 非修改性序列操作: `std::all_of`, `std::any_of`, `std::none_of`, `std::for_each`, `std::count`, `std::count_if`, `std::mismatch`, `std::find`, `std::find_if`, `std::find_if_not`, `std::adjacent_find`, `std::search`, `std::search_n`, `std::equal`, `std::is_permutation`, `std::lexicographical_compare`. 2. 修改序列操作:`std::copy`, `std::copy_if`, `std::copy_n`, `std::copy_backward`, `std::move`, `std::move_backward`, `std::fill`, `std::fill_n`, `std::transform`, `std::generate`, `std::generate_n`, `std::replace`, `std::replace_if`, `std::replace_copy`, `std::replace_copy_if`, `std::swap`, `std::swap_ranges`, `std::iter_swap`, `std::reverse`, `std::reverse_copy`, `std::rotate`, `std::rotate_copy`, `std::unique`, `std::unique_copy`. 3. 排序和相关操作:`std::sort`, `std::stable_sort`, `std::partial_sort`, `std::partial_sort_copy`, `std::nth_element`. 4. 二分法操作:`std::lower_bound`, `std::upper_bound`, `std::binary_search`, `std::equal_range`. 5. 堆操作:`std::make_heap`, `std::push_heap`, `std::pop_heap`, `std::sort_heap`. 6. 集合操作:`std::merge`, `std::inplace_merge`, `std::includes`, `std::set_union`, `std::set_intersection`, `std::set_difference`, `std::set_symmetric_difference`. 7. 其他操作:`std::accumulate`, `std::iota`, `std::max`, `std::max_element`, `std::min`, `std::min_element`, `std::next_permutation`, `std::prev_permutation`. 这里只是列举了一些常见的算法函数,还有很多其他函数没有列举出来。这些函数可以在 `<algorithm>` 头文件中找到。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值