STL算法之复制 移动 填充 归并 替换

转接自STL算法

1.copy() 将一个区间元素复制到另一个区间
2.copy_if() 将满足谓词Pred条件的元素复制到另一个区间
3.copy_backward() 将区间的元素从最后一个元素开始复制
4.copy_n() 复制一个区间的n个元素到另一区间
5 move() 将区间的元素移到另一个区间
6.move_backward() 将区间元素从最后一个元素从后向前复制
7.transform() 将区间的元素通过func()的返回值复制到另一个(或相同)区间
8.merge() 将两个有序区间归并到另一个区间
9.swap_ranges() 交换两个区间的元素
10.fill() 将区间里元素以特定值填充
11.fill_n() 从起点开始填充n个特定值
12.generate() 以func操作的结果替换每一个元素
13.generate_n() 以func操作的结果替换以beg开始的n个元素
14.iota() 将区间元素以value值开始的递增值替换
15.replace() 将区间里oldvalue以newvalue替换
16.replace_if() 将区间里满足谓词Pred的oldvalue以newvalue替换
17.replace_copy() 将区间复制到另一区间但oldvalue以newvalue代替
18.replace_copy_if() 将区间复制到另一区间但满足谓词Pred的oldvalue以newvalue代替

#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
#include <array>
#include <numeric>

using namespace std;
// 1.copy() 将一个区间元素复制到另一个区间
// 2.copy_if() 将满足谓词Pred条件的元素复制到另一个区间
// 3.copy_backward() 将区间的元素从最后一个元素开始复制
// 4.copy_n() 复制一个区间的n个元素到另一区间
// 5 move() 将区间的元素移到另一个区间
// 6.move_backward() 将区间元素从最后一个元素从后向前复制
// 7.transform() 将区间的元素通过func()的返回值复制到另一个(或相同)区间
// 8.merge() 将两个有序区间归并到另一个区间
// 9.swap_ranges() 交换两个区间的元素
// 10.fill() 将区间里元素以特定值填充
// 11.fill_n() 从起点开始填充n个特定值
// 12.generate() 以func操作的结果替换每一个元素
// 13.generate_n() 以func操作的结果替换以beg开始的n个元素
// 14.iota() 将区间元素以value值开始的递增值替换
// 15.replace() 将区间里oldvalue以newvalue替换
// 16.replace_if() 将区间里满足谓词Pred的oldvalue以newvalue替换
// 17.replace_copy() 将区间复制到另一区间但oldvalue以newvalue代替
// 18.replace_copy_if() 将区间复制到另一区间但满足谓词Pred的oldvalue以newvalue代替
void test()
{
    //1
    //复制输入流到输出流
    //copy(istream_iterator<int>(cin), istream_iterator<int>(),ostream_iterator<int>(cout, " "));
    //
    auto f = [](const int& v)
    {
        return v % 2 == 0;
    };
    //2
    copy_if(istream_iterator<int>(cin), istream_iterator<int>(), ostream_iterator<int>(cout, " "), f);
    //3
    vector<int> a{ 1,2,3,4,5,6 };
    array<int, 6> b;
    copy_backward(a.begin(), a.end(), b.end());
    for (auto &v : b)
        cout << v << ends;
    cout << endl;
    //4
    copy_n(a.begin(), 3, ostream_iterator<int>(cout, " "));
    cout << endl;
    vector<int> c;
    //5
    move(a.begin(), a.end(), back_inserter(c));
    for (auto &v : c)
        cout << v << ends;
    cout << endl;
    //6
    array<int, 6> d;
    move_backward(c.begin(), c.end(), d.end());
    for (auto &v : d)
        cout << v << ends;
    auto f1 = [](int& v)
    {
        return v * v;
    };
    //7
    transform(d.begin(), d.end(), d.begin(), f1);
    cout << endl;
    for (auto &v : d)
        cout << v << ends;
    //8
    cout << endl;
    vector<int> e;
    merge(a.begin(), a.end(), b.begin(), b.end(), back_inserter(e));
    for (auto &v : e)
        cout << v << ends;
    cout << ends;
    //9
    swap_ranges(a.begin(), a.begin() + 3, b.begin() + 3);
    for (auto &v : a)
        cout << v << ends;
    //10
    fill(a.begin(), a.end(), 3);
    cout << endl;
    for (auto &v : a)
        cout << v << ends;
    //11
    fill_n(a.begin(), 3, 2);
    cout << endl;
    for (auto &v : a)
        cout << v << ends;
    auto f2 = [&]()
    {
        return *a.begin() + 1;
    };
    cout << endl;
    //12
    generate(a.begin(), a.end(), f2);
    for (auto &v : a)
        cout << v << ends;
    //13
    generate_n(a.begin(),3,f2);
    cout << endl;
    for (auto &v : a)
        cout << v << ends;
    //14
    iota(a.begin(), a.end(), 5);
    cout << endl;
    for (auto &v : a)
        cout << v << ends;
    //15
    replace(a.begin(), a.end(), 6, 5);
    cout << endl;
    for (auto &v : a)
        cout << v << ends;
    auto f3 = [](const int& v)
    {
        return v > 6;
    };
    //16
    replace_if(a.begin(), a.end(), f3, 5);
    cout << endl;
    for (auto &v : a)
        cout << v << ends;
    //17
    replace_copy(b.begin(), b.end(), a.begin(), 2, 7);
    cout << endl;
    for (auto &v : a)
        cout << v << ends;
    //18
    replace_copy_if(a.begin(), a.end(), b.begin(), f3, 5);
    cout << endl;
    for (auto &v : b)
        cout << v << ends;
}
int main()
{
    test();
    system("pause");
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值