初始化向量

时间:2018-02-26 16:24:39

标签: c++ vector shared-ptr

我有这个指向vector的向量:

std::vector<std::shared_ptr<std::vector<int>>> vec;

我想将第一个指针初始化为指向空向量的指针。我试过这个:

vec.push_back(nullptr);

然后我想将一些值push_back到nullptr指向的向量。我这样做了:

vec[0]->push_back(x);

我知道这是错误的,它最终会出现在段错误中。我尝试用make_shared()而不是nullptr做一些事情,但我仍然无法弄清楚如何实现我提到的。任何人都可以帮我修复这个例子吗?

1 个答案:

答案 0 :(得分:7)

如果您希望vec包含一个向量的有效共享指针,它就像

一样简单
vec.emplace_back(std::make_shared<std::vector<int>>());

现在有指针,指向有效对象。使您的后续子脚本和取消引用有效。

请确保你没有第二次。如果先插入nullptr,然后插入有效指针,则指向对象的vec[1],而不是vec[0]。您的原始尝试在向量的开头放置一个空的共享指针。如果你在它之后插入更多元素,它就不会去任何地方。