もしそうなら、配列の最後に null ターミネータがあると仮定できますか?
2 に答える
2
コピー コンストラクターは、vector
ポインターをベクターの内部ストレージにコピーするだけではありません。他のベクトルの内容のコピーを作成します。(ポインタをコピーしただけの場合、一方のベクトルに加えられた変更はもう一方のベクトルに反映されます。ご存じのとおり、それはvector
クラスの動作ではありません。)
さらに、ベクトルの内部ストレージの終わりを示す特別なものがあるという保証はありません。(また、内部ストレージは必ずしも配列ではありません。) ベクトルの末尾を検出するには、size
関数を使用して、ベクトルに許可されている最大のインデックスを決定するか、反復子を によって返されたものと比較しますend
。自分でセンチネル値を設定するか、ライブラリのドキュメントでセンチネル値を期待するように指示されていない限り、センチネル値を探してはいけません。
于 2012-02-24T18:16:00.923 に答える
0
おそらく、のコンストラクターについて話しているのでしょうstd::vector<T>
。それがコピー コンストラクターであり、配列のアドレスではなく、別のベクターへの const 参照を取ります。その他のベクトルのプロバイダーであるあなたは、終端の null を追加する必要はありません。
std::vector<int> mine;
std::vector<int> theirs(mine); // no particular change required for mine
于 2012-02-24T18:17:37.673 に答える