1

VSでSTLを使用してMSVCを使用しています。それが与えるオートコンプリートの提案は私に悲しみを与えています。std::transformこの関数の提案を破っていただけませんか?

_OutTy * transform<_InIt1, _InTy, _InSize, _OutTy, _OutSize, _Fn2>
(_InIt1 _First1, _InIt1 _Last1, _InTy (&_First2)[_InSize], _OutTy(&_Dest)[_OutSize], _Fn2 _Func)

編集:申し訳ありませんが、もっと明確にすべきでした。トランスフォームのドキュメントを見ました。私は誰かに上の文のさまざまな記号を分解してほしかった。

ありがとう。

4

4 に答える 4

3
_OutTy* // output type   
transform<_InIt1, // input iterator type for first range
          _InTy, _InSize, // input and size type for second range (array)
          _OutTy, _OutSize, // output and size type for output range (array)
          _Fn2> // transformation function object type
(_InIt1 _First1, _InIt1 _Last1, // first and last iterators for first range
 _InTy (&_First2)[_InSize], // array for second range
 _OutTy(&_Dest)[_OutSize], // array for output range
 _Fn2 _Func) // transformation function object

私の推奨事項:これを行うために時間を無駄にしないでください。それを自分で分解するのに数分かかりましたが、私はこのことに慣れています。他の投稿で提案されているように、ドキュメントにすばやくアクセスできます。

MSVC の C++ ライブラリの実装を解読できるようにしたい場合は、インテリセンスだけでなく、ヘッダーを調べると役立ちます。InIt入力反復子、ランダムアクセス反復子など、それらが使用する一般的な規則のいくつかを取り上げますRanIt。また、シーケンス、入力反復子、双方向反復子などの基本的な STL の概念を理解することも不可欠です。日付は付いていますが、丁寧に言葉遣いされた参考文献: http://www.sgi.com/tech/stl/table_of_contents.html

このオーバーロードについて注意すべきことは、2 番目の範囲と出力範囲はサイズが自動的に推定される配列であるのに対し、最初の範囲は通常、範囲の開始と終了を指す 2 つの反復子として指定されることです。それ以外の場合、最初の 3 つのパラメーターは入力反復子になり、4 番目の戻り値の型は出力反復子になります。

于 2012-06-19T01:49:51.583 に答える
3

推奨されるオーバーロードは、3 番目と 4 番目の引数が両方とも配列である場合の特殊化です。_InTy (&_First2)[_InSize]はより読みやすくInType (&Second)[InputLength]、つまりSecond型の配列への参照InType[InputLength]です。

この特殊化の利点は、コンパイラが 2 番目の入力シーケンスの長さを認識していることです。メインのオーバーロードには、テンプレート化されたInputIterator BeginOfSecond引数だけがあり、引数はありませんEndOfSecond

同様に、_OutTy(&_Dest)[_OutSize]配列の場合、出力シーケンスの長さをコンパイラが検出できるようにします。

于 2012-06-15T14:56:08.643 に答える
1

cplusplus.com から cppreference.com への更新されたリファレンス

cppreference.comから

template< class InputIterator1, class InputIterator2, class OutputIterator, class BinaryOperation >
OutputIterator transform( InputIterator1 first1, 
                          InputIterator1 last1,
                          InputIterator2 first2, 
                          OutputIterator d_first, 
                          BinaryOperation binary_op );

パラメーター

  • first1, last1 - 変換する要素の最初の範囲
  • first2 - 変換する要素の 2 番目の範囲の先頭
  • d_first - 宛先範囲の開始、first1 または first2 と等しい場合があります
  • binary_op - 適用される二項演算関数オブジェクト。関数のシグネチャは、次と同等である必要が ありますRet fun(const Type1 &a, const Type2 &b); 。シグネチャに const & を含める必要はありません。タイプ Type1 および Type2 は、タイプ InputIterator1 および InputIterator2 のオブジェクトを逆参照してから、それぞれ Type1 および Type2 に暗黙的に変換できるようにする必要があります。タイプ Ret は、タイプ OutputIterator のオブジェクトを逆参照して、タイプ Ret の値を割り当てることができるようなものでなければなりません。</li>

戻り値

  • 変換された最後の要素の後の要素への出力イテレータ。

それが役立つことを願っています

于 2012-06-15T14:20:32.247 に答える
0

実際のところ、C++ Intellisense は時々面倒です。したがって、F1 を押すか、 MSDNで std::transform を検索することをお勧めします。

_First1
    An input iterator addressing the position of the first element in the first source range to be operated on.
_Last1
    An input iterator addressing the position one past the final element in the first source range operated on.
_First2
    An input iterator addressing the position of the first element in the second source range to be operated on.
_Result
    An output iterator addressing the position of the first element in the destination range.
_Func
    User-defined unary function object used in the first version of the algorithm that is applied to each element in the first source range or A user-defined (UD) binary function object used in the second version of the algorithm that is applied pairwise, in a forward order, to the two source ranges. 
于 2012-06-15T14:21:23.977 に答える