私は、次のような初期化リストでコンストラクタを持っている場合:理解ベクトルの初期化
std::vector<int> _list;
Program::Program() : _list(0)
{
}
これは、ベクターは、それ自体のサイズを変更しても、0にすべての値を初期化していますか?
私は、次のような初期化リストでコンストラクタを持っている場合:理解ベクトルの初期化
std::vector<int> _list;
Program::Program() : _list(0)
{
}
これは、ベクターは、それ自体のサイズを変更しても、0にすべての値を初期化していますか?
あなたが呼んでいるベクトルコンストラクタの引数を誤解しているようです。 _list(0)
は、型intのデフォルト値を使用して_list
を長さゼロに初期化します。これは、ゼロになることもありますが、ベクトルに要素が含まれていない場合は関係ありません。明示的に要素の値をゼロに設定しません。おそらく、コンストラクタに指定された回数だけ単一の値を繰り返させることを意図していたでしょうか?その場合は、最初の引数として目的の長さを渡し、2番目の引数の値を繰り返し渡す必要があります。この構造体は、ベクトルを展開するためのサイズ変更には影響しません。新しいベクトル要素をデフォルト値(またはvector::resize
に追加引数として指定した場合は別の値)に設定します。ここ
は、第一の長さ5のために繰り返す値10
でベクトルを初期化コードに基づいて、説明する例です、その後長さのベクトルのサイズを変更10.
#include <iostream>
#include <vector>
class Program
{
public:
Program() : _list(0) { }
Program(unsigned long size, int value) : _list(size, value) { }
void ResizeList(unsigned long size)
{
_list.resize(size);
}
void PrintList() const
{
std::cout << "_list = ";
for (const auto& val : _list)
{
std::cout << val << ", ";
}
std::cout << std::endl;
}
private:
std::vector<int> _list;
};
int main()
{
Program p(5, 10);
p.PrintList();
p.ResizeList(10);
p.PrintList();
return 0;
}
出力:
_list = 10, 10, 10, 10, 10,
_list = 10, 10, 10, 10, 10, 0, 0, 0, 0, 0,
あなたはthe documentation for the std::vector
constructorを見れば、あなたはコンストラクタ(3)
、あなたが使用している1のために、あなたは_list
でインプレースタイプint
の0
要素を構築していることがわかりますことがわかります。これはあなたが本質的に何もしていないことを意味します。
resize
関数を使用しない限り、ベクトルがサイズ変更されると、スペースが割り当てられる要素は初期化されません。この場合、要素はデフォルト値または選択した値に初期化されます。例えば
あなたのベクトルが空だったとあなたは_list.resize(10);
をした場合、_list
は今ちょうど0
であるべき、int
のデフォルト・構築タイプの10個の要素が含まれます。 _list.resize(10, 5);
の代わりに_list
に10 5
が含まれるようになりました。
私はこれがあなたのために物事をクリアするのを助けてくれることを願っています。フォローアップの質問がある場合は、お気軽にお問い合わせください。
あなたの質問は分かりません。あなたが掲示したベクトルはエントリーを持っていません - ベクトルはちょうどそれ自身でサイズ変更しません。 'push_back'、' insert'、 'emplace_back'、' resize'のように、ベクトル関数の1つを呼び出す必要があります。これらの関数を呼び出すと、ベクトルに配置されるものを制御しています。 – PaulMcKenzie
SInce leading underscoreは、グローバル名前空間内の実装のカスタム識別子に使用される規則であり、通常は独自の識別子では避けられます。メンバ変数の一般的な規約はBoostライブラリで使用されているもので、末尾にアンダースコアがあります。 –
質問を明確にしてください。 –