我有这个主要功能,我希望得到一个多维数组来生成图形而不是cout
int main(){
zoro z;
std:ifstream k("ggg.grf");
z.getfromstream(k);
for(int i =0 ; i < z.nnodes; i++){
edge_iteratore s = z.begin(i);
while(s != z.end(i)){
std:cout << "(" << (*s).height << "," << (*s).weight << ")" << std::endl;
++s;
}
}
return 0;
}
我&#39;试图让std :: out到一个函数来生成一个多维数组 所以我已经实现了这个函数来获得一个数组,
int createarr(height,width){
int** ary = new int*[height];
for(int i = 0; i < height; ++i)
ary[i] = new int[weight];
}
但没有任何作用,我如何返回一个多维数组以在另一个函数调用中使用它而不是将其输出到屏幕。
答案 0 :(得分:1)
如果height
和weight
是您在编译时知道的constexpr
值,请声明std::array<<std::array<int>, weight>, height>
。这将获得您的参考地点。如果它们是您在运行时计算的值或可能不同的值,请使用vector<vector<int>>(height)
并初始化每一行。然后编译器负责为您释放内存。如果只修复了一个,你也可以做一个数组向量或向量数组。
令人遗憾的是,由于char** argv
的遗留main()
接口,每个初级C和C ++程序员都认为你是如何做二维数组的。像这样的衣衫褴褛的阵列几乎不是你真正想要的。但如果你这样做,请使用std::vector
为你管理内存。
写入createarr()
的问题是它没有返回任何数组指针,但RAII更可能是你想要的。如果你确实有一个稀疏矩阵可以从粗糙中受益,你可以使用像压缩稀疏行这样的格式。
答案 1 :(得分:1)
您需要返回指向已创建数组的指针。
但是你需要以某种方式处理这是动态分配内存的事实,即你需要在完成后释放它。
你还需要以某种方式封装尺寸,这意味着它需要是一个结构。
当你最终厌倦了处理内存泄漏,并了解指针如何工作时,请使用std :: vector,就像另一个人说的那样。
与此同时,不要在不首先理解基础知识的情况下尝试在C中实现复杂的算法。首先,努力了解指针和数组的实际工作方式。