-1

これを見てください... http: //en.cppreference.com/w/cpp/container/vector/insertコンパイラは、3番目と4番目、つまり、コピーの数を作成するかどうかをどのように区別できますか。目的のintまたはいっぱいにするために、提供された範囲のコンテナー。

// 3rd
iterator insert( const_iterator pos, size_type count, const T& value );

// 4th
template< class InputIt >
iterator insert( const_iterator pos, InputIt first, InputIt last ); 

前もって感謝します。

4

2 に答える 2

2

これはコンパイラ (またはライブラリ ライター) の問題であり、あなたの問題ではありません。標準ではInputIt、フォーム 3 を呼び出すことができる型であれば、フォーム 3 が呼び出されたかのように動作する必要があると規定されています。InputIt通常、何らかの形式のテンプレート メタプログラミングが使用されるため、反復子を受け取るテンプレート関数は、暗黙的に a に変換できるかどうかsize_type(C++03) に 基づいてオーバーロード解決によって選択された 2 つの異なる関数に転送されます。InputIt正当な反復子 (C++11) になります。

于 2012-12-12T15:27:14.167 に答える
0

aniteratorとaconst_iteratorはまったく同じクラスではありません。その場合、コンパイラは、使用する必要のあるオーバーロードされたバージョンを推測するのに問題はありません。

編集:4番目のバージョンの2番目と最後の引数は同じである必要があり、の概念に従う必要がありますInputIterator。size_tの場合ではなく、あいまいさはありません

于 2012-12-12T15:12:15.497 に答える