次の方法で共有


remove_copy (STL Samples)

Visual C++ で remove_copy の標準テンプレート ライブラリ関数を使用する方法に (STL) ついて説明します。

template<class ForwardIterator, class OutputIterator, class Type> inline
   OutputIterator remove_copy(
      ForwardIterator First,
      ForwardIterator Last,
      OutputIterator Result,
      const T& Value
   )

解説

[!メモ]

プロトタイプのクラスやパラメーター名はヘッダー ファイルのバージョンと一致しない。ただし読みやすさが向上するように変更されました。

remove_copy のアルゴリズムは要素をスキップ 結果 から始まるスコープの範囲 (FirstLast) からすべての要素を検索します Value にコピーします。これは最後の新しい要素の直後に配置される反復子を返します。

使用例

// remove_copy.cpp
// compile with: /EHsc
// Illustrates how to use the remove_copy function.
//
// Functions:
//   remove_copy - copy the elements of a sequence to another sequence
//                 eliminating any elements that match value.
//   begin - Returns an iterator that points to the first element in a
//           sequence.
//   end - Returns an iterator that points one past the end of a sequence.
//////////////////////////////////////////////////////////////////////

// disable warning C4786: symbol greater than 255 character,
// okay to ignore
#pragma warning(disable: 4786)

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

using namespace std;


int main()
{
   const int MAX_ELEMENTS = 8 ;

   // Define a template class vector of integers
   typedef vector<int > IntVector ;

   //Define an iterator for template class vector of integer
   typedef IntVector::iterator IntVectorIt ;

   //vector containing numbers
   IntVector Numbers(MAX_ELEMENTS), Result(MAX_ELEMENTS) ;

   IntVectorIt start, end, it, last, resultIt ;

   //Initialize vector Numbers
   Numbers[0] = 10 ;
   Numbers[1] = 20 ;
      Numbers[2] = 10 ;
   Numbers[3] = 15 ;
   Numbers[4] = 12 ;
   Numbers[5] = 7 ;
   Numbers[6] = 9 ;
   Numbers[7] = 10 ;

   start = Numbers.begin() ;   // location of first
                               // element of Numbers

   end = Numbers.end() ;       // one past the location
                               // last element of Numbers

   resultIt = Result.begin() ; // location of first
                               // element of Result

   // print content of Numbers
   cout << "Numbers { " ;
   for(it = start; it != end; it++)
      cout << *it << " " ;
   cout << " }\n" << endl ;

   // copy all elements from Numbers to Result
   // skipping any item that equals 10
   last = remove_copy(start, end, resultIt, 10) ;

   //print number of elements copied to Result
   cout << "Total number of elements copied to Result = "
      << last - resultIt << endl ;

   start = Result.begin() ;   // location of first
                               // element of Result

   end = Result.end() ;       // one past the location
                              // last element of Result

   // print content of Result
   cout << "Result { " ;
   for(it = start; it != end; it++)
      cout << *it << " " ;
   cout << " }\n" << endl ;
}

出力

Numbers { 10 20 10 15 12 7 9 10  }

Total number of elements copied to Result = 5
Result { 20 15 12 7 9 0 0 0  }

必要条件

ヘッダー : <algorithm>

参照

概念

標準テンプレート ライブラリのサンプル