用新元素创建向量

create vector with new elements

所以我有以下内容

vector<vector< tuple<string, double>*>*>* graph;

一个二维向量,带有一个字符串和双精度元组。 我想用一定的大小和 一个新的 vector*>,在 big (outside)vector

的每个元素中

并且我使用了以下行

graph = new vector<vector<tuple<string, double>*>*>(67, new vector< tuple<string,double>*>());

这个东西可以用,但是当我试图释放它时,我发现我创建的所有新向量都是 相同的向量。 意思是,所有元素都指向同一个向量。我明白为什么会这样但是 有没有一种方法可以初始化所有向量而不必执行 for 循环,即

for(int i....)
    graph->push_back(new vector< tuple<string,double>*>);

问题总结:

行中

graph = new vector<vector<tuple<string, double>*>*>(67, new vector< tuple<string,double>*>());

使用了 std::vector 的构造函数 3 (reference) 这将评估 new vector<tuple<string,double>*>() 一次 ,然后创建一个包含此指针的 67 个副本的向量。

解决方案:

除非你有充分的理由,否则不要使用指针。使用

vector<vector<tuple<string, double>>> graph;

那么你可以简单地做

graph.resize(67);

插入 67 个默认构造值。不需要指点。

也许您已经习惯了经常使用 new 的语言,但您不应该在 C++ 中这样做。 std::vectorstd::string 是管理底层动态数组的相当小的对象。创建指向它们的指针通常不是您想要的,并且还可能降低性能。