常用STL算法4_拷贝和替换

9 篇文章 0 订阅
#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <vector>
#include <set>
#include <list>
#include <algorithm>
#include <functional>
#include <string>
#include <iterator> //输出流
using namespace std;

template <typename T>
void printElem(T &t)
{
    T::iterator it;
    for (it = t.begin(); it != t.end(); it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}

void main091_copy()
{
    vector<int> vecIntA;
    vecIntA.push_back(1);
    vecIntA.push_back(3);
    vecIntA.push_back(5);
    vecIntA.push_back(7);
    vecIntA.push_back(9);

    vector<int> vecIntB;
    vecIntB.resize(vecIntA.size());     
    /*
    _OutIt copy(_InIt _First, _InIt _Last, _OutIt _Dest)
    {   
        // copy [_First, _Last) to [_Dest, ...)
        if (_First == _Last)
            return (_Dest);
        else
        {   
        // worth copying, check then copy
        _DEBUG_RANGE(_First, _Last);
        _DEBUG_POINTER(_Dest);
        return (_Copy_impl(_Unchecked(_First), _Unchecked(_Last), _Dest, _Is_checked(_Dest)));
        }
    }
    */
    copy(vecIntA.begin(), vecIntA.end(), vecIntB.begin());  //vecIntB: {1,3,5,7,9}
    printElem(vecIntB);

}
//将指定范围内的所有等于oldValue的元素替换成newValue。
void main092_replace()
{
    vector<int> vecIntA;
    vecIntA.push_back(1);
    vecIntA.push_back(3);
    vecIntA.push_back(5);
    vecIntA.push_back(3);
    vecIntA.push_back(9);
    /*
    void replace(_FwdIt _First, _FwdIt _Last, const _Ty& _Oldval, const _Ty& _Newval)
    {   
        // replace each matching _Oldval with _Newval
        _DEBUG_RANGE(_First, _Last);
        _Replace(_Unchecked(_First), _Unchecked(_Last), _Oldval, _Newval);
    }
    */
    replace(vecIntA.begin(), vecIntA.end(), 3, 8);      //{1,8,5,8,9}
    printElem(vecIntA);
}

bool GreatThree(int &num)
{
    return (num > 3);
}

//将指定范围内所有操作结果为true的元素用新值替换。
void main093_replace_if()
{
    vector<int> vecIntA;
    vecIntA.push_back(1);
    vecIntA.push_back(3);
    vecIntA.push_back(5);
    vecIntA.push_back(7);
    vecIntA.push_back(9);
    /*
    void replace_if(_FwdIt _First, _FwdIt _Last, _Pr _Pred, const _Ty& _Val)
    {   
        // replace each satisfying _Pred with _Val
        _DEBUG_RANGE(_First, _Last);
        _DEBUG_POINTER(_Pred);
        _Replace_if(_Unchecked(_First), _Unchecked(_Last), _Pred, _Val);
    }

    void _Replace_if(_FwdIt _First, _FwdIt _Last, _Pr _Pred, const _Ty& _Val)
    {   
        // replace each satisfying _Pred with _Val
        for (; _First != _Last; ++_First)
            if (_Pred(*_First))
                *_First = _Val;
    }
    */
    replace_if(vecIntA.begin(), vecIntA.end(), GreatThree, 8);  // GreaterThree的定义在上面
    printElem(vecIntA);
}
 //交换两个容器的元素
void main094_swap()
{
    vector<int> vecIntA;
    vecIntA.push_back(1);
    vecIntA.push_back(3);
    vecIntA.push_back(5);

    vector<int> vecIntB;
    vecIntB.push_back(2);
    vecIntB.push_back(4);

    /*
    void swap(vector<_Ty, _Alloc>& _Left, vector<_Ty, _Alloc>& _Right)
    {
        // swap _Left and _Right vectors
        _Left.swap(_Right);
    }
    */

    swap(vecIntA, vecIntB);  //交换  全部交换,大小不限制
    printElem(vecIntA);
    printElem(vecIntB);
}

int main()
{
    //main091_copy();
    //main092_replace();//将指定范围内的所有等于oldValue的元素替换成newValue。
    //main093_replace_if();//将指定范围内所有操作结果为true的元素用新值替换。
    main094_swap(); //交换两个容器的元素

    cout<<"\nhello"<<endl;
    system("pause");
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值