以下std :: vector代码是否有效?

ano*_*non 4 c++ stdvector

std::vector<Foo> vec;
Foo foo(...);

assert(vec.size() == 0);
vec.reserve(100); // I've reserved 100 elems
vec[50] = foo; // but I haven't initialized any of them
// so am I assigning into uninitialized memory?
Run Code Online (Sandbox Code Playgroud)

以上代码是否安全?

Joh*_*itb 7

它无效.向量没有元素,因此您无法访问它们的任何元素.您只需为100元素保留空间(这意味着在插入超过100个元素之前,保证不会重新分配).

事实是,你不能在不初始化元素的情况下调整向量的大小(即使只是默认初始化).