STL-algorithm3

merge算法

  • 容器元素合并,并存储到另一容器中(每个容器必须有 序)
void test01()//merge算法 容器元素合并,并存储到另一容器中(每个容器必须有 序)
{
       vector<int> v1;
       v1.push_back(1);
       v1.push_back(3);
       v1.push_back(5);
       v1.push_back(7);

       vector<int> v2;
       v2.push_back(2);
       v2.push_back(4);
       v2.push_back(6);
       v2.push_back(8);

       vector<int>v3;
       v3.resize(v1.size()+v2.size());
       merge(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin());
       for_each(v3.begin(),v3.end(),[](int val){cout<<val<<" ";});
       cout<<endl;
}

random_shuffle算法

  • 对指定范围内的元素随机调整次序
  • 设置随机种子srand(time(NULL));,否则每次随机的结果都是一样的

#include<time.h>
void test02()//random_shuffle算法 对指定范围内的元素随机调整次序
{
    vector<int> v1;
    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);
    v1.push_back(7);

    srand(time(NULL));

    for_each(v1.begin(),v1.end(),[](int val){cout<<val<<" ";});
    random_shuffle(v1.begin(),v1.end());
   cout<<endl;
    for_each(v1.begin(),v1.end(),[](int val){cout<<val<<" ";});
    cout<<endl;
}

reverse算法

  • 反转指定范围的元素
void test03()//reverse算法 反转指定范围的元素
{
    vector<int> v1;
       v1.push_back(1);
       v1.push_back(3);
       v1.push_back(5);
       v1.push_back(7);
       for_each(v1.begin(),v1.end(),[](int val){cout<<val<<" ";});
       cout<<endl;//1 3 5 7

       reverse(v1.begin(),v1.end());

       for_each(v1.begin(),v1.end(),[](int val){cout<<val<<" ";});
       cout<<endl;//7 5 3 1
}

copy算法

  • 将容器内指定范围的元素拷贝到另一容器中
  • copy秀一下:用copy输出(了解)
#include <iterator>
void test04()//copy算法 将容器内指定范围的元素拷贝到另一容器中
{            //copy秀一下:用copy输出(了解)
    vector<int> v1;
        v1.push_back(1);
        v1.push_back(3);
        v1.push_back(5);
        v1.push_back(7);

        vector<int>v2;
        v2.resize(v1.size());

        copy(v1.begin(),v1.end(),v2.begin());
        for_each(v2.begin(),v2.end(),[](int val){cout<<val<<" ";});

        copy(v2.begin(),v2.end(),ostream_iterator<int>(cout," "));

}

replace算法

  • 将容器内指定范围的旧元素修改为新元素
  • replace_if条件替换,bind2nd
void test05()//replace算法 将容器内指定范围的旧元素修改为新元素
{
        vector<int> v1;
       v1.push_back(1);
       v1.push_back(3);
       v1.push_back(5);
       v1.push_back(7);
       replace(v1.begin(),v1.end(),3,3000);
       copy(v1.begin(),v1.end(),ostream_iterator<int>(cout," "));

       vector<int> v2;
      v2.push_back(1);
      v2.push_back(3);
      v2.push_back(5);
      v2.push_back(7);
      //将容器的大于3替换成3000
      replace_if(v2.begin(),v2.end(),bind2nd(greater<int>(),3),1000);
      copy(v2.begin(),v2.end(),ostream_iterator<int>(cout," "));

}

算术生成算法

  • accumulate算法 计算容器元素累计总和
void test06()
{
         vector<int> v1;
        v1.push_back(1);
        v1.push_back(3);
        v1.push_back(5);
        v1.push_back(7);

        int sum=accumulate(v1.begin(),v1.end(),1000);
        cout<<sum<<endl;

}
  • fill算法 向容器中添加元素
void test07()
{
    vector<int>v;
    v.resize(5);
    fill(v.begin(),v.end(),100);
    copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));
}
  • 常用集合算法
    交集,并集,差集
void test08()
{
    vector<int> A;
       A.push_back(1);
       A.push_back(3);
       A.push_back(5);
       A.push_back(7);
       A.push_back(9);

       vector<int> B;
       B.push_back(7);
       B.push_back(9);
       B.push_back(2);
       B.push_back(4);
       B.push_back(6);

       vector<int>v1;//存放交集
       v1.resize(min(A.size(),B.size()));
       vector<int>::iterator myEnd
               =set_intersection(A.begin(),A.end(),B.begin(),B.end(),v1.begin());
       copy(v1.begin(),v1.end(),ostream_iterator<int>(cout," "));
        cout<<endl;
       vector<int>v2;//存放并集
       v2.resize(A.size()+B.size());
       myEnd=set_union(A.begin(),A.end(),B.begin(),B.end(),v2.begin());
       copy(v2.begin(),v2.end(),ostream_iterator<int>(cout," "));
       vector<int> v3;//存放并集
      v3.resize( A.size() );
      myEnd = set_difference(A.begin(),A.end(),B.begin(),B.end(), v3.begin());
      copy(v3.begin(), myEnd, ostream_iterator<int>(cout," ") );
      cout<<endl;

      //求差集 B 差 A
      vector<int> v4;//存放并集
      v4.resize( B.size() );
      myEnd = set_difference(B.begin(),B.end(),A.begin(),A.end(), v4.begin());
      copy(v4.begin(), myEnd, ostream_iterator<int>(cout," ") );
      cout<<endl;
}
int main(int argc, char *argv[])
{
   // test01();
   // test02();
    //test03();
   // test04();
   // test05();
   // test06();
    //test07();
    test08();
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值