STL_算法_交换(swap_ranges)

C++ Primer 学习中。。。

 

简单记录下我的学习过程 (代码为主)


所有容器适用
swap_ranges(b,e,b2)  //优点: 可局部交换、可以在不同类型容器间交换

注意:下列两种方法也是交换算法
    1、容器的swap()成员函数
    2、赋值操作


/**------http://blog.csdn.net/u010579068------**/
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<list>
#include<deque>
#include<algorithm>
using namespace std;

/*****************************************
//所有容器适用
swap_ranges(b,e,b2)  //优先可局部交换+可以在不同类型容器间交换

注意:下列两种方法也是交换算法
    1、容器的swap()成员函数
    2、赋值操作
*****************************************/
/**----------------------------------------------------------------------------------

----------------------------------------------------------------------------------**/
/*************************************************************************************
std::swap_ranges                     所有排序容器适用                           algorithm
--------------------------------------------------------------------------------------
template < class ForwardIterator1, class ForwardIterator2 >
  ForwardIterator2 swap_ranges ( ForwardIterator1 first1, ForwardIterator1 last1,
                                 ForwardIterator2 first2 );

//eg:
template<class ForwardIterator1, class ForwardIterator2>
  ForwardIterator2 swap_ranges ( ForwardIterator1 first1, ForwardIterator1 last1,
                                 ForwardIterator2 first2 )
{
  while (first1!=last1) swap(*first1++, *first2++);
  return first2;
}
*************************************************************************************/


int main()
{
    vector<int> first (5,10);        //  first: 10 10 10 10 10
    vector<int> second (7,33);       // second: 33 33 33 33 33 5

    vector<int>::iterator it;

    swap_ranges(first.begin()+1, first.end()-1, second.begin());

    // print out results of swap:
    cout << "first contains:";
    for (it=first.begin(); it!=first.end(); ++it)
        cout << " " << *it;

    cout << "\nsecond contains:";
    for (it=second.begin(); it!=second.end(); ++it)
        cout << " " << *it;

    cout << endl;
    cout << endl;
/**-------------------------------------------------------------------**/
    //swap_ranges是有返回值的,返回的是迭代器,指向第二个容器的第一个没有交换的位置
    int a[]={1,2,3,4,5,6,7};
    int b[]={9,10,11,12};
    vector<int> third (a,a+7);
    deque<int> fourth(b,b+4);

    deque<int>::iterator iter;
    auto riter=swap_ranges(third.begin()+2, third.end()-3, fourth.rbegin()+1);

    cout << "third contains:";
    for (it=third.begin(); it!=third.end(); ++it)
    cout << " " << *it;

    cout << "\nfourth contains:";
    for (iter=fourth.begin(); iter!=fourth.end(); ++iter)
    cout << " " << *iter;

    cout << endl;
    cout<<"第一个没有交换的元素:  "<<*riter<<endl;
    return 0;
}
/*******
Output:
    first contains: 10 33 33 33 10
    second contains: 10 10 10 33 33 33 33

    third contains: 1 2 11 10 5 6 7
    fourth contains: 9 4 3 12
    第一个没有交换的元素:  9
**/


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值