はの問題を可視化を支援するヘルパークラスを作成してみましょう増加しない:は直接のstdに割り当てる::ベクトルを確保した後、エラーをスローしませんが、ベクトルのサイズ
class C
{
int ID = 0;
public:
C(const int newID)
{
ID = newID;
}
int getID()
{
return ID;
}
};
あなたは空std::vector<C>
、その後、予備を作成すると
std::vector<C> pack;
pack.reserve(10);
printf("pack has %i\n", pack.size()); //will print '0'
今、あなたがC
の新しいインスタンスを割り当てます。それは10個の要素を保持します私は二つのことがここで奇妙なことがわかっ0
:
1)が代入は、コンパイラ(Visual Studioの2015年、リリースモード)も、リリースモードでエラーをスロー作るべきではないのですか?
2)実際には要素が位置4に格納されているため、ベクトルのサイズがゼロではなく1であるべきではありませんか?
可能重複[ベクトル間の選択::リサイズ()とベクトル::リザーブ()](https://stackoverflow.com/質問/ 7397768 /ベクトル選択とベクター選択の選択 –
@underscore_d私の質問は、その質問と重複することは絶対にありません。ロングショットではありません。私は '予備 'と'サイズ変更'が何をするのかをよく知っています。私の質問は、 'reserve'が呼ばれた後の' at'の振る舞いです。 – blipblop
_ "私の質問は、" at "の動作に関することです_ _長いショットではありません。地球上では '.at()'の振る舞いはどうですか? '.at()'を使用した場合、プログラムは未定義の動作を生成するのではなく、明確なエラーを通知します。とにかく、あなたの質問は '.resize()'以外の特定の方法( '.reserve()'と '' operator [] 'での索引付けが' 'を増やすことができるかどうかを尋ねるためです。 size() '、' .reserve() 'の後の未割り当てポイントへのインデックス付けが可能かどうかを指定します。 '.at()'はあなたに言ったでしょう –