ホーム | ブログ | C++辞典 | サイトマップ | FAQ | 掲示板 | リンク集
メイン・メニュー
インデックス
プログラミング
その他


 #navi(<algorithm>ヘッダ)
 
 **更新を伴う列演算 (mutating sequence operations) [#rc7442c1]
 
 &aname(copy);
 ***copy [#w66e8245]
 列のコピー
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[InputIterator>反復子#input]], class [[OutputIterator>反復子#output]]>~
 &nbsp; &nbsp; [[OutputIterator>反復子#output]] ''copy''([[InputIterator>反復子#input]] '''first''', [[InputIterator>反復子#input]] '''last''', [[OutputIterator>反復子#output]] '''result''');~
 }~
 
 ''[[引数]]''~
   '''first''':  コピー元である列の先頭要素を指す [[InputIterator>反復子#input]]~
   '''last''':  コピー元である列の終端要素の次を指す [[InputIterator>反復子#input]]~
   '''result''':  コピー先である列の先頭要素を指す [[OutputIterator>反復子#output]]~
 
 ''[[返却値]]''~
  コピー先である列の終端要素の次を指す[[反復子]]を返す。
 
 ''解説''~
  区間 ['''first''', '''last''') から区間 ['''result''', '''result''' + ('''last''' - '''first''')) へ、'''first''' から順に各要素をコピーする。'''result''' は区間  ['''first''', '''last''') にあってはならない。
 
 ''計算量''~
  ちょうど '''last''' - '''first''' 回の代入を行う。
 
 ''参照''~
 → [[copy_backward>#copy_backward]]
 
 &aname(copy_backward);
 ***copy_backward [#h280200b]
 列の逆方向コピー
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[BidirectionalIterator1>反復子#bidirectional]], class [[BidirectionalIterator2>反復子#bidirectional]]>~
 &nbsp; &nbsp; [[BidirectionalIterator2>反復子#bidirectional]] ''copy_backward''~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;([[BidirectionalIterator>反復子#bidirectional]] '''first''', [[BidirectionalIterator>反復子#bidirectional]] '''last''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[BidirectionalIterator>反復子#bidirectional]] '''result''');~
 }~
 
 ''[[引数]]''~
   '''first''':  コピー元である列の先頭要素を指す [[BidirectionalIterator>反復子#bidirectional]]~
   '''last''':  コピー元である列の終端要素の次を指す [[BidirectionalIterator>反復子#bidirectional]]~
   '''result''':  コピー先である列の終端要素の次を指す [[BidirectionalIterator>反復子#bidirectional]]~
 
 ''[[返却値]]''~
  コピー先である列の終端要素の次を指す[[反復子]]を返す。
 
 ''解説''~
  区間 ['''first''', '''last''') から区間 ['''result''' - ('''last''' - '''first'''), '''result''') へ、'''last''' - 1 から順に '''first''' まで各要素をコピーする。'''result''' は区間  ['''first''', '''last''') にあってはならない。
 
 ''参考''~
 '''last''' が区間 ['''result''' - ('''last''' - '''first'''), '''result''') にある場合には、[[copy 関数>#copy]]より copy_backward 関数を使う方がよい。
 
 ''計算量''~
  ちょうど '''last''' - '''first''' 回の代入を行う。
 
 ''参照''~
 → [[copy_backward>#copy_backward]]
 
 &aname(swap);
 ***swap [#o7533eee]
 値の交換
 
 ''形式''~
 namespace std {~
 &nbsp; template<class T> void ''swap''(T& a, T& b);~
 }~
 
 ''[[引数]]''~
   '''a''':  交換対象の[[オブジェクト>C++ オブジェクトモデル#object]]への参照~
   '''b''':  交換対象の[[オブジェクト>C++ オブジェクトモデル#object]]への参照~
 
 ''[[返却値]]''~
  なし
 
 ''解説''~
  2 つの[[実引数>引数#argument]] '''a''' および '''b''' に格納されている値を交換する。
 
 ''参照''~
 → [[swap_ranges>#swap_ranges]], [[iter_swap>#iter_swap]]
 
 &aname(swap_ranges);
 ***swap_ranges [#p9480035]
 列の各要素の値交換
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[ForwardIterator1>反復子#forward]], class [[ForwardIterator2>反復子#forward]]>~
 &nbsp; &nbsp; [[ForwardIterator2>反復子#forward]] ''swap_ranges''([[ForwardIterator1>反復子#forward]] '''first1''', [[ForwardIterator1>反復子#forward]] '''last1''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[ForwardIterator2>反復子#forward]] '''first2''');~
 }~
 
 ''[[引数]]''~
   '''first1''':  対象となる一方の列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
   '''last1''':  対象となる一方の列の終端要素の次を指す [[ForwardIterator>反復子#forward]]~
   '''first2''':  対象となる他方の列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
 
 ''[[返却値]]''~
  ('''first2''' + ('''last1''' - '''first1''')) を返す。
 
 ''解説''~
  区間 ['''first1''', '''last1''') で定義される列および区間 ['''first2''', '''first2''' + ('''last1''' - '''first1''')) で定義される列のそれぞれの要素の値を交換する。具体的には、'''n''' < ('''last1''' - '''first''') である負でない整数値 '''n''' に対して、[[swap>#swap]](*('''first1''' + '''n'''), *('''first2''' + '''n''')) を実行する。交換対象となる 2 つのの区間は重なっていてはならない。
 
 ''計算量''~
  ちょうど '''last1''' - '''first1''' 回の交換が行われる。
 
 ''参照''~
 → [[swap>#swap]], [[iter_swap>#iter_swap]]
 
 &aname(iter_swap);
 ***iter_swap [#ece3af92]
 [[反復子]]が指す値の交換
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[ForwardIterator1>反復子#forward]], class [[ForwardIterator2>反復子#forward]]>~
 &nbsp; &nbsp; void ''iter_swap''([[ForwardIterator1>反復子#forward]] '''a''', [[ForwardIterator1>反復子#forward]] '''b''');~
 }~
 
 ''[[引数]]''~
   '''a''':  交換対象の[[反復子]]
   '''b''':  交換対象の[[反復子]]
 
 ''[[返却値]]''~
  なし
 
 ''解説''~
  2 つの[[反復子]] '''a''' および '''b''' が指す値を交換する。
 
 ''参照''~
 → [[swap>#swap]]
 
 &aname(transform);
 ***transform [#kd3103a5]
 各要素の変換
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[InputIterator>反復子#input]], class [[OutputIterator>反復子#output]], class UnaryOperator>~
 &nbsp; &nbsp; [[OutputIterator>反復子#output]] ''transform''([[InputIterator>反復子#input]] '''first''', [[InputIterator>反復子#input]] '''last''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[OutputIterator>反復子#output]] '''result''', UnaryOperator '''op''');~
 
 &nbsp; template<class [[InputIterator1>反復子#input]], class [[InputIterator2>反復子#input]],~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; class [[OutputIterator>反復子#output]], class BinaryOperator>~
 &nbsp; &nbsp; [[OutputIterator>反復子#output]] ''transform''([[InputIterator1>反復子#input]] '''first1''', [[InputIterator1>反復子#input]] '''last1''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[InputIterator2>反復子#input]] '''first2''', [[OutputIterator>反復子#output]] '''result''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BinaryOperator '''binary_op''');~
 }~
 
 ''[[引数]]''~
   '''first''':  対象列の先頭要素を指す [[InputIterator>反復子#input]]~
   '''last''':  対象列の終端要素の次を指す [[InputIterator>反復子#input]]~
   '''first1''':  二項変換で用いる第 1 項用の列の先頭要素を指す [[InputIterator>反復子#input]]~
   '''last1''':  二項変換で用いる第 1 項用の列の終端要素の次を指す [[InputIterator>反復子#input]]~
   '''first2''':  二項変換で用いる第 2 項用の列の先頭要素を指す [[InputIterator>反復子#input]]~
   '''result''':  出力先の列の先頭要素を指す [[OutputIterator>反復子#output]]~
   '''op''':  単項変換用の[[述語]]~
   '''binary_op''':  二項変換用の[[述語]]~
 
 ''[[返却値]]''~
  結果列の終端要素の次を指す[[反復子]]を返す。
 
 ''解説''~
  最初の形式では、区間 ['''first''', '''last''') にある[[反復子]] '''iter''' に対して、'''op'''(*'''iter''') を適用した結果を、'''result''' から始まる列に出力する。'''result''' は '''first''' と同じであっても構わない。~
  2 番目の形式では、区間 ['''first1''', '''last1''') にある[[反復子]] '''iter1''' および区間 ['''first2''', '''first2''' + ('''last1''' - '''first1''')) にある反復子 '''iter2''' に対して、'''binary_op'''(*'''iter1''', *'''iter2''') を適用した結果を、'''result''' から始まる列に出力する。'''result''' は '''first1''' または '''first2''' と同じであっても構わない。
 
 ''計算量''~
  ちょうど '''last''' - '''first''' または '''last1''' - '''first1''' 回述語が適用される。
 
 &aname(replace);
 ***replace [#c65109b1]
 要素の置換
 
 ''形式''
 namespace std {~
 &nbsp; template<class [[ForwardIterator>反復子#forward]], class T>~
 &nbsp; &nbsp; void ''replace''([[ForwardIterator>反復子#forward]] '''first''', [[ForwardIterator>反復子#forward]] '''last''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;const T& '''old_value''', const T& '''new_value''');~
 }~
 
 ''[[引数]]''~
   '''first''':  対象となる列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
   '''last''':  対象となる列の終端要素の次を指す [[ForwardIterator>反復子#forward]]~
   '''old_value''':  置換対象の値。型 T は Assignable かつ EqualityComparable~
   '''new_value''':  置換後の値。型 T は Assignable かつ EqualityComparable~
 
 '''[[返却値]]]'''~
  なし
 
 ''解説''~
  区間 ['''first''', '''last''') にある[[反復子]] '''iter''' に対して、*'''iter''' == '''old_value''' が成立する各要素に対して、'''new_value''' を代入する。
 
 ''計算量''~
  ちょうど '''last''' - '''first''' 回比較が行われる。
 
 ''参照''~
 → [[replace_if>#replace_if]], [[replace_copy>#replace_copy]], [[replace_copy_if>#replace_copy_if]]
 
 &aname(replace_if);
 ***replace_if [#id93a1c8]
 条件が成立する要素の置換
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[ForwardIterator>反復子#forward]], class Predicate, class T>~
 &nbsp; &nbsp; void ''replace_if''([[ForwardIterator>反復子#forward]] '''first''', [[ForwardIterator>反復子#forward]] '''last''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Predicate '''pred''', const T& '''new_value''');~
 }~
 
 ''[[引数]]''~
   '''first''':  対象となる列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
   '''last''':  対象となる列の終端要素の次を指す [[ForwardIterator>反復子#forward]]~
   '''pred''':  [[述語]]~
   '''new_value''':  置換後の値。型 T は Assignable~
 
 '''[[返却値]]]'''~
  なし
 
 ''解説''~
  区間 ['''first''', '''last''') にある[[反復子]] '''iter''' に対して、'''pred'''(*'''iter''', '''old_value''') != false が成立する各要素に対して、'''new_value''' を代入する。
 
 ''計算量''~
  ちょうど '''last''' - '''first''' 回述語が適用される。
 
 &aname(replace_copy);
 ***replace_copy [#u3778e2b]
 要素の置換コピー
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[InputIterator>反復子#input]], class [[OutputIterator>反復子#output]], class T>~
 &nbsp; &nbsp; [[OutputIterator>反復子#output]] ''replace_copy''([[InputIterator>反復子#input]] '''first''', [[InputIterator>反復子#input]] '''last''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[OutputIterator>反復子#output]] '''result''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const T& '''old_value''', const T& '''new_value''');~
 }~
 
 ''[[引数]]''~
   '''first''':  対象となる列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
   '''last''':  対象となる列の終端要素の次を指す [[ForwardIterator>反復子#forward]]~
   '''result''':  出力先となる列の先頭要素を指す [[OutputIterator>反復子#output]]~
   '''old_value''':  置換対象の値。型 T は Assignable かつ EqualityComparable~
   '''new_value''':  置換後の値。型 T は Assignable かつ EqualityComparable~
 
 '''[[返却値]]]'''~
  結果列の終端要素の次を指す[[反復子]]を返す。
 
 ''解説''~
  区間 ['''first''', '''last''') にある[[反復子]] '''iter''' に対して、*'''iter''' == '''old_value''' が成立する場合は '''new_value''' を、それ以外は *'''iter''' を '''result''' から始まる列にコピーする。元の列と出力先の列は重なっていてはならない。
 
 ''計算量''~
  ちょうど '''last''' - '''first''' 回比較が行われる。
 
 &aname(replace_copy_if);
 ***replace_copy_if [#o001a85b]
 条件が成立する要素の置換コピー
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[InputIterator>反復子#input]], class [[OutputIterator>反復子#output]], class Predicate, class T>~
 &nbsp; &nbsp; [[OutputIterator>反復子#output]] ''replace_copy_if''([[InputIterator>反復子#input]] '''first''', [[InputIterator>反復子#input]] '''last''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[[OutputIterator>反復子#output]] '''result''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Predicate '''pred''', const T& '''new_value''');~
 }~
 
 ''[[引数]]''~
   '''first''':  対象となる列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
   '''last''':  対象となる列の終端要素の次を指す [[ForwardIterator>反復子#forward]]~
   '''result''':  出力先となる列の先頭要素を指す [[OutputIterator>反復子#output]]~
   '''pred''':  [[述語]]~
   '''new_value''':  置換後の値。型 T は Assignable~
 
 '''[[返却値]]]'''~
  結果列の終端要素の次を指す[[反復子]]を返す。
 
 ''解説''~
  区間 ['''first''', '''last''') にある[[反復子]] '''iter''' に対して、'''pred'''(*'''iter''', '''old_value''') != false が成立する場合は '''new_value''' を、それ以外は *'''iter''' を '''result''' から始まる列にコピーする。元の列と出力先の列は重なっていてはならない。
 
 ''計算量''~
  ちょうど '''last''' - '''first''' 回述語が適用される。
 
 &aname(fill);
 ***fill [#y01fbbe7]
 列を指定値で埋める
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[ForwardIterator>反復子#forward]], class T>~
 &nbsp; &nbsp; void ''fill''([[ForwardIterator>反復子#forward]] '''first''', [[ForwardIterator>反復子#forward]] '''last''', const T& '''value''');~
 }~
 
 ''[[引数]]''~
   '''first''':  対象となる列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
   '''last''':  対象となる列の終端要素の次を指す [[ForwardIterator>反復子#forward]]~
   '''value''':  列を埋める値~
 
 ''[[返却値]]''~
  なし
 
 ''解説''~
  区間 ['''first''', '''last''') にあるすべての[[反復子]]を通して、各要素に '''value''' を[[代入]]する。
 
 ''計算量''~
  ちょうど '''last''' - '''first''' 回代入が行われる。
 
 &aname(fill_n);
 ***fill_n [#z2d7e841]
 n 要素の列を指定値で埋める
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[ForwardIterator>反復子#forward]], class Size, class T>~
 &nbsp; &nbsp; void ''fill_n''([[ForwardIterator>反復子#forward]] '''first''', Size '''n''', const T& '''value''');~
 }~
 
 ''[[引数]]''~
   '''first''':  対象となる列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
   '''n''':  対象となる列の要素数~
   '''value''':  列を埋める値~
 
 ''[[返却値]]''~
  なし
 
 ''解説''~
  区間 ['''first''', '''first''' + '''n''') にあるすべての[[反復子]]を通して、各要素に '''value''' を[[代入]]する。
 
 ''計算量''~
  ちょうど '''n''' 回代入が行われる。
 
 &aname(generate);
 ***generate [#uf5e9903]
 列の生成
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[ForwardIterator>反復子#forward]], class Generator>~
 &nbsp; &nbsp; void ''generate''([[ForwardIterator>反復子#forward]] '''first''', [[ForwardIterator>反復子#forward]] '''last''', Generator '''gen''');~
 }~
 
 ''[[引数]]''~
   '''first''':  生成対象となる列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
   '''last''':  生成対象となる列の終端要素の次を指す [[ForwardIterator>反復子#forward]]~
   '''gen''':  生成関数~
 
 ''[[返却値]]''~
  なし
 
 ''解説''~
  区間 ['''first''', '''last''') にあるすべての[[反復子]]を通して、'''gen''' の[[返却値]]を[[代入]]する。'''gen''' は[[実引数>引数#argument]]を取らない。
 
 ''計算量''~
  ちょうど '''last''' - '''first''' 回 '''gen''' が呼び出される。
 
 ''参照''~
 → [[generate_n>#generate_n]]
 
 &aname(generate_n);
 ***generate_n [#x48b4af0]
 n 要素の列を生成
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[ForwardIterator>反復子#forward]], class Size, class Generator>~
 &nbsp; &nbsp; void ''generate_n''([[ForwardIterator>反復子#forward]] '''first''', Size '''n''', Generator '''gen''');~
 }~
 
 ''[[引数]]''~
   '''first''':  生成対象となる列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
   '''n''':  生成対象となる列の要素数~
   '''gen''':  生成関数~
 
 ''[[返却値]]''~
  なし
 
 ''解説''~
  区間 ['''first''', '''first''' + '''n''') にあるすべての[[反復子]]を通して、'''gen''' の[[返却値]]を[[代入]]する。'''gen''' は[[実引数>引数#argument]]を取らない。また、型 Size は[[汎整数型>基本型#integral]]に変換できなければならない。
  区間 ['''first''', '''first''' + '''n''') にあるすべての[[反復子]]を通して、'''gen''' の[[返却値]]を[[代入]]する。'''gen''' は[[実引数>引数#argument]]を取らない。また、型 Size は[[汎整数型>型/3.9.1基本型#integral]]に変換できなければならない。
 
 ''計算量''~
  ちょうど '''n''' 回 '''gen''' が呼び出される。
 
 ''参照''~
 → [[generate>#generate]]
 
 &aname(remove);
 ***remove [#m3e5da17]
 要素の削除
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[ForwardIterator>反復子#forward]], class T>~
 &nbsp; &nbsp; [[ForwardIterator>反復子#forward]] ''remove''([[ForwardIterator>反復子#forward]] '''first''', [[ForwardIterator>反復子#forward]] '''last''', const T& '''value''');~
 }~
 
 ''[[引数]]''~
   '''first''':  対象となる列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
   '''last''':  対象となる列の終端要素の次を指す [[ForwardIterator>反復子#forward]]~
   '''value''':  削除対象。型 T は EualityComparable~
 
 ''[[返却値]]''
  結果列の終端要素の次を指す[[反復子]]を返す。
 
 ''解説''~
  区間 ['''first''', '''last''') にある[[反復子]] '''iter''' に対して、*'''iter''' == '''value''' が成立する要素を削除する。削除されない要素の相対順序は、元の相対順序が保存される。
 
 ''計算量''~
  ちょうど '''last''' - '''first''' 回比較が行われる。
 
 ''参照''~
 → [[remove_if>#remove_if]], [[remove_copy>#remove_copy]], [[remove_copy_if>#remove_copy_if]]
 
 &aname(remove_if);
 ***remove_if [#i9fdd35d]
 条件が成立する要素の削除
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[ForwardIterator>反復子#forward]], class Predicate>~
 &nbsp; &nbsp; [[ForwardIterator>反復子#forward]] ''remove_if''([[ForwardIterator>反復子#forward]] '''first''', [[ForwardIterator>反復子#forward]] '''last''', Predicate '''pred''');~
 }~
 
 ''[[引数]]''~
   '''first''':  対象となる列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
   '''last''':  対象となる列の終端要素の次を指す [[ForwardIterator>反復子#forward]]~
   '''pred''':  [[述語]]~
 
 ''[[返却値]]''
  結果列の終端要素の次を指す[[反復子]]を返す。
 
 ''解説''~
  区間 ['''first''', '''last''') にある[[反復子]] '''iter''' に対して、'''pred'''(*'''iter''', '''value''') != false が成立する要素を削除する。削除されない要素の相対順序は、元の相対順序が保存される。
 
 ''計算量''~
  ちょうど '''last''' - '''first''' 回述語が適用される。
 
 ''参照''~
 → [[remove>#remove]], [[remove_copy>#remove_copy]], [[remove_copy_if>#remove_copy_if]]
 
 &aname(remove_copy);
 ***remove_copy [#iba79127]
 指定要素を除くコピー
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[InputIterator>反復子#input]], class [[OutputIterator>反復子#output]], class T>~
 &nbsp; &nbsp; [[OutputIterator>反復子#output]] ''remove_copy''([[InputIterator>反復子#input]] '''first''', [[InputIterator>反復子#input]] '''last''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[OutputIterator>反復子#output]] '''result''', const T& '''value''');~
 }~
 
 ''[[引数]]''~
   '''first''':  対象となる列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
   '''last''':  対象となる列の終端要素の次を指す [[ForwardIterator>反復子#forward]]~
   '''result''':  出力先の先頭要素を指す [[OutputIterator>反復子#output]]~
   '''value''':  削除対象。型 T は EualityComparable~
 
 ''[[返却値]]''
  結果列の終端要素の次を指す[[反復子]]を返す。
 
 ''解説''~
  区間 ['''first''', '''last''') にある[[反復子]] '''iter''' に対して、*'''iter''' == '''value''' が成立する要素を除き、'''result''' から始まる列にコピーする。削除されない要素の相対順序は、元の相対順序が保存される。元の列と出力先の列は重複していてはならない。
 
 ''計算量''~
  ちょうど '''last''' - '''first''' 回比較が行われる。
 
 &aname(remove_copy_if);
 ***remove_copy_if [#vfed6724]
 条件が成立する要素を除くコピー
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[InputIterator>反復子#input]], class [[OutputIterator>反復子#output]], class Predicate>~
 &nbsp; &nbsp; [[OutputIterator>反復子#output]] ''remove_copy_if''([[InputIterator>反復子#input]] '''first''', [[InputIterator>反復子#input]] '''last''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[[OutputIterator>反復子#output]] '''result''', Predicate '''pred''');~
 }~
 
 ''[[引数]]''~
   '''first''':  対象となる列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
   '''last''':  対象となる列の終端要素の次を指す [[ForwardIterator>反復子#forward]]~
   '''result''':  出力先の先頭要素を指す [[OutputIterator>反復子#output]]~
   '''pred''':  [[述語]]~
 
 ''[[返却値]]''
  結果列の終端要素の次を指す[[反復子]]を返す。
 
 ''解説''~
  区間 ['''first''', '''last''') にある[[反復子]] '''iter''' に対して、'''pred'''(*'''iter''', '''value''') != false が成立する要素を除き、'''result''' から始まる列にコピーする。削除されない要素の相対順序は、元の相対順序が保存される。元の列と出力先の列は重複していてはならない。
 
 ''計算量''~
  ちょうど '''last''' - '''first''' 回述語が適用される。
 
 &aname(unique);
 ***unique [#b3f4d5c7]
 連続した重複要素の除去
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[ForwardIterator>反復子#forward]]>~
 &nbsp; &nbsp; [[ForwardIterator>反復子#forward]] ''unique''([[ForwardIterator>反復子#forward]] '''first''', [[ForwardIterator>反復子#forward]] '''last''');
 
 &nbsp; template<class [[ForwardIterator>反復子#forward]], class BinaryPredicate>~
 &nbsp; &nbsp; [[ForwardIterator>反復子#forward]] ''unique''([[ForwardIterator>反復子#forward]] '''first''', [[ForwardIterator>反復子#forward]] '''last''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BinaryPredicate '''pred''');
 }~
 
 ''[[引数]]''~
   '''first''':  対象となる列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
   '''last''':  対象となる列の終端要素の次を指す [[ForwardIterator>反復子#forward]]~
   '''pred''':  [[述語]]~
 
 ''[[返却値]]''~
  結果列の終端要素の次を指す[[反復子]]を返す。
 
 ''解説''~
  区間 ['''first''', '''last''') にあるすべての重複要素を取り除く。すなわち、区間内の (先頭位置を除く) [[反復子]] '''iter''' に対して、最初の形式では *'''iter''' == *('''iter''' - 1) を、2 番目の形式では '''pred'''(*'''iter''', *('''iter''' - 1)) == false が成立する最長の部分から、その先頭要素を残して他の要素が除去される。
 
 ''計算量''~
  列が空でなければ、ちょうど ('''last''' - '''first''') - 1 回比較または[[述語]] が適用される。そうでなければ、比較または述語は 1 回も適用されることはない。
 
 ''参照''~
 → [[unique_copy>#unique_copy]]
 
 &aname(unique_copy);
 ***unique_copy [#h68e4007]
 連続した重複要素を除くコピー
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[InputIterator>反復子#input]], class [[OutputIterator>反復子#output]]>~
 &nbsp; &nbsp; [[OutputIterator>反復子#output]] ''unique_copy''([[InputIterator>反復子#input]] '''first''', [[InputIterator>反復子#input]] '''last''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[OutputIterator>反復子#output]] '''result''');
 
 &nbsp; template<class [[InputIterator>反復子#input]], class [[OutputIterator>反復子#output]], class BinaryPredicate>~
 &nbsp; &nbsp; [[OutputIterator>反復子#output]] ''unique_copy''([[InputIterator>反復子#input]] '''first''', [[InputIterator>反復子#input]] '''last''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[OutputIterator>反復子#output]] '''result''', BinaryPredicate '''pred''');
 }~
 
 ''[[引数]]''~
   '''first''':  対象となる列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
   '''last''':  対象となる列の終端要素の次を指す [[ForwardIterator>反復子#forward]]~
   '''result''':  出力先の先頭要素を指す [[OutputIterator>反復子#output]]~
   '''pred''':  [[述語]]~
 
 ''[[返却値]]''~
  結果列の終端要素の次を指す[[反復子]]を返す。
 
 ''解説''~
  区間 ['''first''', '''last''') にあるすべての重複要素を除いて、'''result''' から始まる列にコピーする。すなわち、区間内の (先頭位置を除く) [[反復子]] '''iter''' に対して、最初の形式では *'''iter''' == *('''iter''' - 1) を、2 番目の形式では '''pred'''(*'''iter''', *('''iter''' - 1)) == false が成立する最長の部分から、その先頭要素のみがコピーされる。
 
 ''計算量''~
  ちょうど ('''last''' - '''first''') - 1 回比較または[[述語]] が適用される。
 
 ''参照''~
 → [[unique>#unique]]
 
 &aname(reverse);
 ***reverse [#lec11a2a]
 列の逆順再配置
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[BidirectionalIterator>反復子#bidirectional]]>~
 &nbsp; &nbsp; void ''reverse''([[BidirectionalIterator>反復子#bidirectional]] '''first''', [[BidirectionalIterator>反復子#bidirectional]] '''last''');
 }~
 
 ''[[引数]]''~
   '''first''':  再配置対象となる列の先頭要素を指す [[BidirectionalIterator>反復子#bidirectional]]~
   '''last''':  再配置対象となる列の終端要素の次を指す [[BidirectionalIterator>反復子#bidirectional]]~
 
 ''[[返却値]]''~
  なし
 
 ''解説''~
  区間 ['''iter''', '''last''') で定義される列を [[iter_swap>#iter_swap]] により逆順に再配置する。
 
 ''計算量''~
  多くとも '''last''' - '''first''' 回の交換を行う。
 
 ''参照''~
 → [[reverse_copy>#reverse_copy]]
 
 &aname(reverse_copy);
 ***reverse_copy [#d3ed5050]
 列の逆順コピー
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[BidirectionalIterator>反復子#bidirectional]], class [[OutputIterator>反復子#output]]>~
 &nbsp; &nbsp; [[OutputIterator>反復子#output]] ''reverse_copy''([[BidirectionalIterator>反復子#bidirectional]] '''first''', [[BidirectionalIterator>反復子#bidirectional]] '''last'''~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[OutputIterator>反復子#output]] '''result''');
 }~
 
 ''[[引数]]''~
   '''first''':  対象となる列の先頭要素を指す [[BidirectionalIterator>反復子#bidirectional]]~
   '''last''':  対象となる列の終端要素の次を指す [[BidirectionalIterator>反復子#bidirectional]]~
   '''result''':  出力先となる列の先頭要素を指す [[OutputIterator>反復子#output]]~
 
 ''[[返却値]]''~
  なし
 
 ''解説''~
  区間 ['''iter''', '''last''') で定義される列を、'''result''' から始まる列に、逆順にコピーする。元の列と出力先の列が重なっていてはならない。
 
 ''計算量''~
  ちょうど '''last''' - '''first''' 回の代入が行われる。
 
 ''参照''~
 → [[reverse>#reverse]]
 
 &aname(rotate);
 ***rotate [#zcb2d24c]
 列の回転
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[ForwardIterator>反復子#forward]]>~
 &nbsp; &nbsp; void ''rotate''([[ForwardIterator>反復子#forward]] '''first''', [[ForwardIterator>反復子#forward]] '''middle''', [[ForwardIterator>反復子#forward]] '''last''');~
 }~
 
 ''[[引数]]''~
   '''first''':  回転対象となる列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
   '''middle''':  回転後に先頭に移動する要素を指す [[ForwardIterator>反復子#forward]]~
   '''last''':  回転対象となる列の終端要素の次を指す [[ForwardIterator>反復子#forward]]~
 
 ''[[返却値]]''~
  なし
 
 ''解説''~
  区間 ['''first''', '''last''') を、'''middle''' が指す要素が先頭になるように回転しする。区間 ['''first''', '''middle''') および区間 ['''middle''', '''last''') は正しい列でなければならない。
 
 ''計算量''~
  多くとも '''last''' - '''first''' 回の交換が行われる。
 
 ''参照''~
 → [[rotate_copy>#rotate_copy]]
 
 &aname(rotate_copy);
 ***rotate_copy [#j79db3a7]
 列の回転とコピー
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[ForwardIterator>反復子#forward]], class [[OutputIterator>反復子#output]]>~
 &nbsp; &nbsp; [[OutputIterator>反復子#output]] ''rotate_copy''([[ForwardIterator>反復子#forward]] '''first''', [[ForwardIterator>反復子#forward]] '''middle''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[ForwardIterator>反復子#forward]] '''last''', [[OutputIterator>反復子#output]] '''result''');~
 }~
 
 ''[[引数]]''~
   '''first''':  回転対象となる列の先頭要素を指す [[ForwardIterator>反復子#forward]]~
   '''middle''':  回転後に先頭に移動する要素を指す [[ForwardIterator>反復子#forward]]~
   '''last''':  回転対象となる列の終端要素の次を指す [[ForwardIterator>反復子#forward]]~
   '''result''':  出力先となる列の先頭要素を指す [[OutputIterator>反復子#output]]~
 
 ''[[返却値]]''~
  結果列の終端位置の次を指す[[反復子]]を返す。
 
 ''解説''~
  区間 ['''first''', '''last''') を、'''middle''' が指す要素が先頭になるように回転し、その結果を '''result''' から始まる列に格納する。区間 ['''first''', '''middle''') および区間 ['''middle''', '''last''') は正しい列でなければならない。また、元の列と出力先の列が重なっていてはならない。
 
 ''計算量''~
  ちょうど '''last''' - '''first''' 回の代入が行われる。
 
 ''参照''~
 → [[rotate>#rotate]]
 
 &aname(random_shuffle);
 ***random_shuffle [#u7d2655e]
 乱数によるシャッフル
 
 ''形式''~
 namespace std {~
 &nbsp; template<class RandomAccessIterator>~
 &nbsp; &nbsp; void ''random_shuffle''(RandomAccessIterator '''first''', RandomAccessIterator '''last''');
 
 &nbsp; template<class RandomAccessIterator, class RandomNumberGenerator>~
 &nbsp; &nbsp; void ''random_shuffle''(RandomAccessIterator '''first''', RandomAccessIterator '''last'''~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RandomNumberGenerator& rand);
 }~
 
 ''[[引数]]''~
   '''first''':  シャッフル対象となる列の先頭要素を指す RandomAccessIterator~
   '''last''':  シャッフル対象となる列の終端要素の次を指す RandomAccessIterator~
   '''rand''':  乱数生成[[関数オブジェクト]]~
 
 ''[[返却値]]''~
  なし
 
 ''解説''~
  区間 ['''first''', '''last''') で定義される列を一様にシャッフルする。乱数生成[[関数オブジェクト]] '''rand''' は任意のものを指定してもよいが、[[iterator_traits>#<iterator>ヘッダ#iterator_traits]]<RandomAccessIterator>:: difference_type 型の正の[[実引数>引数#argument]] '''n''' に対して、'''rand'''('''n''') は、iterator_traits<RandomAccessIterator>:: difference_type 型に変換可能な型を持ち、かつ値域 [0, '''n''') の中からランダムに抽出された値を返さなければならない。
 
 ''計算量''~
  ちょうど ('''last''' - '''first''') - 1 回の交換が行われる。
 
 ''参照''~
 → [[rand><cstdlib>ヘッダ#rand]], [[srand><cstdlib>ヘッダ#srand]]
 
 &aname(partition);
 ***partition [#gdbb95f1]
 列の分割
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[BidirectionalIterator>反復子#bidirectional]], class Predicate>~
 &nbsp; &nbsp; [[BidirectionalIterator>反復子#bidirectional]] ''partition''([[BidirectionalIterator>反復子#bidirectional]] '''first''', [[BidirectionalIterator>反復子#bidirectional]] '''last''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Predicate pred);~
 }~
 
 ''[[引数]]''~
   '''first''':  分割対象となる列の先頭要素を指す [[BidirectionalIterator>反復子#bidirectional]]~
   '''last''':  分割対象となる列の終端要素の次を指す [[BidirectionalIterator>反復子#bidirectional]]~
   '''pred''':  [[述語]]~
 
 ''[[返却値]]''~
  分割位置を指す[[反復子]]を返す。
 
 ''解説''~
  区間 ['''first''', '''last''') で定義される列を、[[述語]] pred が成立する要素を前に、成立しない要素を後ろに再配置する。
 
 ''計算量''~
  多くとも ('''last''' - '''first''') / 2 回の交換が行われる。メモリが十分にある場合には線形になる可能性がある。また、'''last''' - '''first''' 回だけ述語 '''pred''' が適用される。
 
 ''参照''~
 → [[stable_partition>#stable_partition]]
 
 &aname(stable_partition);
 ***stable_partition [#v86b4a84]
 列の安定な分割
 
 ''形式''~
 namespace std {~
 &nbsp; template<class [[BidirectionalIterator>反復子#bidirectional]], class Predicate>~
 &nbsp; &nbsp; [[BidirectionalIterator>反復子#bidirectional]] ''stable_partition''([[BidirectionalIterator>反復子#bidirectional]] '''first''',~
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[BidirectionalIterator>反復子#bidirectional]] '''last''', Predicate '''pred''');~
 }~
 
 ''[[引数]]''~
   '''first''':  分割対象となる列の先頭要素を指す [[BidirectionalIterator>反復子#bidirectional]]~
   '''last''':  分割対象となる列の終端要素の次を指す [[BidirectionalIterator>反復子#bidirectional]]~
   '''pred''':  [[述語]]~
 
 ''[[返却値]]''~
  分割位置を指す[[反復子]]を返す。
 
 ''解説''~
  区間 ['''first''', '''last''') で定義される列を、[[述語]] pred が成立する要素を前に、成立しない要素を後ろに再配置する。同値の要素の順序は、再配置後も保存される。
 
 ''計算量''~
  多くとも ('''last''' - '''first''')×log('''last''' - '''first''') 回の交換が行われる。メモリが十分にある場合には線形になる可能性がある。また、'''last''' - '''first''' 回だけ述語 '''pred''' が適用される。
 
 ''参照''~
 → [[partition>#partition]]

トップ   編集 差分 バックアップ 添付 複製 名前変更   一覧 単語検索   ヘルプ   最終更新のRSS
 ホーム | プロフィール | メール | ログイン | 管理
Copyright © 2005-2009 by TAKAGI Nobuhisa