现在的位置: 首页 > 综合 > 正文

简单的程序诠释C++ STL算法系列之十七:swap_ranges

2012年12月29日 ⁄ 综合 ⁄ 共 1698字 ⁄ 字号 评论关闭

    前面我们已经熟悉了swap和iter_swap,接下来我们来看看区间元素交换算法:swap_ranges,该算法用于进行两个迭代器区间元素的交换。它的使用原形如下,将迭代器区间[first1,last1)的元素,与迭代器区间[first2,first2+(last1-first1))迭代器区间元素交换其中*first1和*first2交换、*(first+1)和*(first2+1)交换、...*(last1-1)和*(first2+ last1-fitst1)-1)交换。

   函数原型:

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

   参数说明:

first1, last1
指出要进行交换的第一个迭代器区间 [first1,last1)。
first2
指出要进行交换的第二个迭代器区间的首个元素的迭代器位置,该区间的元素个数和第一个区间相等。

    程序示例:

/******************************************************************* 
 * Copyright (C) Jerry Jiang 
 *                
 * File Name   : swap_ranges.cpp 
 * Author      : Jerry Jiang 
 * Create Time : 2012-4-29 22:22:18 
 * Mail        : jbiaojerry@gmail.com 
 * Blog        : http://blog.csdn.net/jerryjbiao  
 *                
 * Description : 简单的程序诠释C++ STL算法系列之十七                   
 *               变易算法 : 区间元素交换 swap_ranges
 *                
 ******************************************************************/  
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main () {
  vector<int> first (5,10);        //  first: 10 10 10 10 10
  vector<int> second (5,33);       // second: 33 33 33 33 33
  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;

  return 0;
}

*******************************************************************************************************************************

C++经典书目索引及资源下载:http://blog.csdn.net/jerryjbiao/article/details/7358796

********************************************************************************************************************************

抱歉!评论已关闭.