用新元素创建向量
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::vector
和 std::string
是管理底层动态数组的相当小的对象。创建指向它们的指针通常不是您想要的,并且还可能降低性能。
所以我有以下内容
vector<vector< tuple<string, double>*>*>* graph;
一个二维向量,带有一个字符串和双精度元组。
我想用一定的大小和
一个新的 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::vector
和 std::string
是管理底层动态数组的相当小的对象。创建指向它们的指针通常不是您想要的,并且还可能降低性能。