生成多二元数组而不是 COUT

generate multidimensinal array instead of cout

本文关键字:数组 COUT 二元      更新时间:2023-10-16

我有这个主要函数,我想从中获取一个多维数组来生成图形而不是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;
}

我试图让 std::out 到一个函数来生成一个多维数组所以我实现了这个函数来获取一个数组,

int createarr(height,width){
     int** ary = new int*[height];
for(int i = 0; i < height; ++i)
    ary[i] = new int[weight];
}

但是没有任何效果,我如何返回一个多维数组以在另一个函数调用中使用它,而不是将其输出到屏幕上。

如果heightweight是您在编译时知道constexpr值,请声明std::array<<std::array<int>, weight>, height> . 这为您提供了参考位置。 如果它们是您在运行时计算的值或可能发生变化的值,请使用 vector<vector<int>>(height) 并初始化每一行。 然后编译器负责为您释放内存。 如果只有一个是固定的,你也可以做一个数组的向量或一个向量数组。

不幸的是,由于main()遗留char** argv接口,每个初学者C++程序员都认为这就是你做二维数组的方式。 像这样的参差不齐的阵列几乎从来都不是你真正想要的。 但是,如果您这样做,请使用std::vector为您管理内存。

所写createarr()的问题在于它不返回任何数组指针,但 RAII 更有可能是您想要的。 如果你确实有一个稀疏矩阵可以从粗糙性中受益,你可以使用压缩稀疏行这样的格式。

您需要返回指向所创建数组的指针。

但是你需要以某种方式处理这样一个事实,即这是动态分配的内存,即,你需要在完成后释放它。

你还需要以某种方式封装尺寸,这意味着它需要是一个结构体。

当你终于厌倦了处理内存泄漏,并理解指针是如何工作的,像其他人说的那样使用 std::vector。

同时,不要在没有先了解基础知识的情况下尝试在 C 中实现复杂的算法。首先,认真复习指针和数组的实际工作原理。