2012-02-24 2 views

答えて

2

vectorコピー?コンストラクタはベクトルの内部ストレージへのポインタをコピーするだけではなく、他のベクトルの内容のコピーを作成します(ポインタをコピーしたばかりの場合、1つのベクトルの変更は他のベクトルに反映されます)。あなたが知っているのは、vectorクラスの振る舞いではありません。)

また、ベクターの内部ストレージの終わりを示す特別なものです。ベクトルの終わりを検出するには、size関数を使用してベクトルの最大許容インデックスを決定するか、またはイテレータとendによって返されたインデックスを比較します(この内部ストレージは必ずしも配列である必要はありません)。あなたが自分でそれを置くか、あなたのライブラリのドキュメンテーションがあなたにそれを期待したことを伝えない限り、センチネルの価値を探すべきではありません。

0

おそらく、あなたはstd::vector<T>のコンストラクタについて話しています。これはコピーコンストラクタであり、配列のアドレスではなく、別のベクトルへのconst参照をとります。その他のベクトルのプロバイダである、あなたは終端のnullを追加する必要はありません。

std::vector<int> mine; 
std::vector<int> theirs(mine); // no particular change required for mine 
+1

"implementation-defined"は、C++標準の技術用語です。つまり、準拠している実装では、どの選択を行うかを文書化する必要があります。実装では、デフォルトで構築された要素をベクタの終わりから守ることを禁止するものは何もありません( 'T'はデフォルトでも構成可能であると仮定します。 )、ただし実装では警告しないという要件はありません。 –

+0

です。実装が各ベクトルのend()イテレータを超えて花を描画することを可能にするが、どこにでも言及する必要はないという用語は何ですか? – wilhelmtell

+0

実装には許容される動作の範囲が設定されていますが、その実装は一貫して動作する必要はなく、動作を記述する必要もありません(必要な場合は、毎回別の選択肢ができます) 。例えば、関数の引数の評価順序は不明です。このようなことに対して、私は通常、標準では花を描くのではなく、実装する必要がないと言っていると思います。そのようなことを不特定にするのは理にかなっていると思うが、それは明示されていないという明示的な陳述ではなく暗黙のものである。 –

関連する問題