stable_partition

[機能]

  単項述語オブジェクトが真になる要素を偽になる要素の前に移動します.その際,最初の前後関係が維持されます.

[形式]
	#include <algorithm>
	#include <functional>

	template <class BidirectionalIterator, class Predicate> BidirectionalIterator stable_partition(BidirectionalIterator first, BidirectionalIterator last, UnaryPredicate pred);
		

[使用例]

  1. partition と stable_partition の使用方法です.
    #include <stdio.h>
    #include <vector>
    #include <algorithm>
    #include <functional>
    using namespace std;
    					// 奇数の判定
    class is_odd : public unary_function<int, bool>
    {
    	public:
    		result_type operator() (argument_type k)
    		{
    			return (result_type)(k % 2);
    		}
    };
    
    int main()
    {
    	vector<int> v1, v2;
    	vector<int>::iterator it;
    					// 初期設定
    	printf("**初期状態** v1\n");
    	for (int i1 = 0; i1 < 5; i1++)
    		v1.push_back(i1+1);
    	for (it = v1.begin(); it != v1.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    
    	printf("**初期状態** v1\n");
    	for (int i1 = 0; i1 < 5; i1++)
    		v2.push_back(i1+1);
    	for (it = v2.begin(); it != v2.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    					// v1 の奇数の要素を前に持ってくる(paatition)
    	printf("奇数の要素を前に持ってくる(paatition)\n");
    	partition(v1.begin(), v1.end(), is_odd());
    	for (it = v1.begin(); it != v1.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    					// v2 の奇数の要素を前に持ってくる(stable_paatition)
    	printf("v2 の奇数の要素を前に持ってくる(stable_paatition)\n");
    	stable_partition(v2.begin(), v2.end(), is_odd());
    	for (it = v2.begin(); it != v2.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    
    	return 0;
    }
    
    (出力)
    
    **初期状態** v1
      1  2  3  4  5
    **初期状態** v1
      1  2  3  4  5
    奇数の要素を前に持ってくる(paatition)
      1  5  3  4  2
    v2 の奇数の要素を前に持ってくる(stable_paatition)
      1  3  5  2  4
    			
[参照]

partition

ホームページ 目次 演習解答例目次 付録目次 索引