1

基本的に私はこのようなことができるようになりたいです

std::vector<int> myInts(3); 
myInts.push_back(1);
myInts.push_back(2);
myInts.push_back(3);

概念的には、ベクトル myInts には、値 {1, 2, 3} を持つ 3 つのスペースのみが必要です

どうやら、上記のコードを C++ で実行すると、結果は {0, 0, 0, 1, 2, 3} になります。

C++ の主な目標の 1 つは効率ですが、コードの最初の行で、初期化されたベクトルに 0 を割り当てる必要はないように思えます。

どう思いますか?「指定された数の単位化されたスペースでベクトルを初期化する」ことは可能ですか?

4

2 に答える 2

0

ベクターをサイズ 3 で初期化し、さらに 3 つのエントリを追加します。

juanchopanza が答えたように、1 つの方法は、ベクター エントリをまだ作成していないベクター用のスペースを予約することです。したがって、予約されているが追加されていないエントリにはアクセスできません。

std::vector<int> myInts;
myInts.reserve(3); 
std::cout << myInts.at(1) << std::endl

「std::out_of_range」をスローする必要があります

もう 1 つの方法は、指定された要素数でベクターを作成 (またはサイズ変更) し、希望に応じて必要なエントリを変更することです。

std::vector<int> myInts(3); 
myInts[0] = 1;
myInts[1] = 2;
myInts[2] = 3;

どの方法を選択するかは、ベクターの使用方法によって異なります。.push_back()たとえば、最後に操作されたインデックスがわからないために使用したい場合は、以前のインデックスかどうかを知らずに、既知のスコープ内の任意のインデックスにいつでもアクセスしたいときに使用する必要が.reserve()ある方法を使用する必要があります。resize()まだ操作されていない (またはインデックスが一部のデータに対して固定されている場合)。

于 2013-11-14T14:32:11.133 に答える