std::vector<int> v1(1000);
std::vector<std::vector<int>> v2(1000);
std::vector<std::vector<int>::const_iterator> v3(1000);
これらの3つのベクトルの要素はどのように初期化されましたか?
intについてテストしたところ、すべての要素が0になることがわかりました。これは標準ですか?プリミティブは未定義のままだと思いました。データの安全性のためにOSメモリがクリアされないように、300000000要素でベクトルを作成し、ゼロ以外の値を指定し、削除して再作成します。再作成されたベクトルの要素も0でした。
イテレータはどうですか?デフォルトのコンストラクターの初期値(0)がありますか、それとも初期値が未定義のままですか?これを確認すると、イテレータは0を指していますが、これはOSである可能性があります
コンストラクターを追跡するための特別なオブジェクトを作成すると、最初のオブジェクトではデフォルトのコンストラクターがベクターで実行され、他のすべてのオブジェクトではコピーコンストラクターが実行されることがわかりました。これは標準ですか?
要素の初期化を完全に回避する方法はありますか?または、独自のベクトルを作成する必要がありますか?(ああ、私はいつも他のベクトルの実装ではないと言います)並列処理で超巨大なスパース行列を使用しているので、push_back()を使用できません。もちろん、無駄な初期化は必要ありません。後で変更します。価値。