第98章 swap_rangesアルゴリズム関数を使う


swap_ranges関数は、ある範囲の要素を、他の要素と入れ替えます。



template<class ForwardIterator1, class ForwardIterator2>
   ForwardIterator2 swap_ranges(
      ForwardIterator1 _First1, 
      ForwardIterator1 _Last1,
      ForwardIterator2 _First2
   );
まずは、例題をみてみましょう。
// swapranges01.cpp

#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

int main()
{
    vector<int>v1, v2;
    vector<int>::iterator pv1, pv2;
    int i;

    for (i = 1; i <= 10; i++)
        v1.push_back(i);

    for (i = 0; i < 6; i++)
        v2.push_back(0);

    for (pv1 = v1.begin(); pv1 != v1.end(); pv1++)
        cout << *pv1 << ", ";
    cout << endl;

    for (pv2 = v2.begin(); pv2 != v2.end(); pv2++)
        cout << *pv2 << ", ";
    cout << endl;

    pv1 = v1.begin() + 2;
    swap_ranges(pv1, pv1 + 3, v2.begin());

    for (pv1 = v1.begin(); pv1 != v1.end(); pv1++)
        cout << *pv1 << ", ";
    cout << endl;

    for (pv2 = v2.begin(); pv2 != v2.end(); pv2++)
        cout << *pv2 << ", ";
    cout << endl;

    return 0;
}
最初にv1,v2の要素を順番に表示しています。

次にv1の3番目の要素(v1.begin() + 2)から、3つだけv2の最初の3つの要素と 取り替えています。



では、次の例題をみてみましょう。

// swapranges02.cpp

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    vector<char *>v1, v2;
    int i;
    vector<char *>::iterator pv1, pv2;

    v1.push_back("abc");
    v1.push_back("def");
    v1.push_back("ghi");
    v1.push_back("jkl");

    for(i = 0; i < 5; i++)
        v2.push_back("0");

    pv1 = v1.begin() + 1;
    swap_ranges(pv1, pv1 + 1, v2.begin() + 1);

    for (pv1 = v1.begin(); pv1 != v1.end(); pv1++)
        cout << *pv1 << ", ";
    cout << endl;

    for (pv2 = v2.begin(); pv2 != v2.end(); pv2++)
        cout << *pv2 << ", ";

    cout << endl;
    
    return 0;
}
v1,v2の要素は文字列です。

v1の2番目の要素から、1つだけv2の要素と取り替えます。しかも、v2の要素は 2番目からです。




[C++Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Aug/16/2005 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。