Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 二维数组作为c+中的参数+;_C++_Arrays_Parameters_Multidimensional Array - Fatal编程技术网

C++ 二维数组作为c+中的参数+;

C++ 二维数组作为c+中的参数+;,c++,arrays,parameters,multidimensional-array,C++,Arrays,Parameters,Multidimensional Array,我想将2D数组传递给另一个函数。我在main函数中有一个代码示例。然而,赋值要求我们将代码分成三个函数,main、adjmatrix和adjlist函数 主功能中的所有功能 #include<iostream> #include<fstream> using namespace std; int main(void) { ifstream in; char infile[40]; int c, u, v; cout << "Ple

我想将2D数组传递给另一个函数。我在main函数中有一个代码示例。然而,赋值要求我们将代码分成三个函数,main、adjmatrix和adjlist函数

主功能中的所有功能

#include<iostream>
#include<fstream>
using namespace std;

int main(void)
{
   ifstream in;

   char infile[40];
   int c, u, v;

   cout << "Please enter the input data file name(NO SPACES): ";
   cin >> infile;

   in.open(infile);
   while(in.fail()) {
      cout << "Please enter a CORRECT input data file name(NO SPACES): ";
      cin >> infile;
      in.open(infile);
   }

   //adj matrix

   cout << "Adjacency Matrix" << endl;
   in >> c;
   int array[c][c];
   for(int i=0; i<c; i++) {
      for(int j=0; j<c; j++) {
         array[i][j] = 0;
      }
   }

   while(in >> u >> v) {
      array[u][v] = 1;
   }

   cout << c << endl;
   for(int i=0;i<c;i++) {
      cout << i << "   ";
      for(int j=0;j<c;j++){
         cout << array[i][j] << " ";
      }
      cout << endl;
   }
   cout << endl;

   //adj list

   cout << "Adjacency List" << endl;
   cout << c << endl;
   for(int i=0;i<c;i++) {
      cout << i  << " --> ";
      for(int j=0;j<c;j++) {
         if(array[i][j] == 1) {
            cout << j << " ";
         }
      }
      cout << endl;
   }

   in.close();

   return 0;
}
以下是输出

Adjacency Matrix
9
0   0 0 0 0 0 0 1 0 0
1   0 0 0 0 0 0 0 1 0
2   0 0 0 1 1 0 1 0 1
3   0 1 0 0 0 0 0 0 0
4   0 1 0 0 0 0 0 0 0
5   0 0 0 0 0 0 0 0 0
6   0 1 0 0 0 0 0 0 0
7   0 0 0 0 0 1 0 0 0
8   0 0 0 0 0 1 0 0 0

Adjacency List
9
0 --> 6
1 --> 7
2 --> 3 4 6 8
3 --> 1
4 --> 1
5 -->
6 --> 1
7 --> 5
8 --> 5
我在某处读到,传递2D数组需要输入第二个维度。我也读到一些关于它必须是一个全局常数的东西?所以我可能有点疯狂,开始疯狂地尝试一些东西,所以请原谅我的愚蠢。我想我遇到的问题是实际数组大小来自文件,所以当int c被初始化为输入文件中的第一个值时,我真的不知道如何用实际值声明数组的第二维度。以下是我传递2D数组的失败尝试。享受:

#include<iostream>
#include<fstream>
using namespace std;

const int c;

void adjmatrix(istream &in, int array[][c]);

int main(void)
{
   ifstream in;

   char infile[40];

   cout << "Please enter the input data file name(NO SPACES): ";
   cin >> infile;

   in.open(infile);
   while(in.fail()) {
      cout << "Please enter a CORRECT input data file name(NO SPACES): ";
      cin >> infile;
      in.open(infile);
   }

   in >> c;
   int array[c][c];

   adjmatrix(in, array);

   in.close();

   return 0;
}

void adjmatrix(istream &in, int array[][c])
{
   int u,v;
   for(int i=0; i<c; i++) {
      for(int j=0; j<c; j++) {
         array[i][j] = 0;
      }
   }

   while(in >> u >> v) {
      array[u][v] = 1;
   }

   cout << c << endl;

   for(int i=0; i<c; i++) {
      cout << i << "   ";
      for(int j=0; j<c; j++) {
         cout << array[i][j] << " ";
      }
      cout << endl;
   }
   cout << endl;
}
#包括
#包括
使用名称空间std;
const int c;
void adjmatrix(istream&in,int数组[][c]);
内部主(空)
{
如果输入;
炭填充[40];
填充;
in.open(infle);
while(in.fail()){
填充;
in.open(infle);
}
在>>c;
int数组[c][c];
调整矩阵(in,数组);
in.close();
返回0;
}
void adjmatrix(istream&in,int数组[][c])
{
INTU,v;
对于(int i=0;i u>>v){
数组[u][v]=1;
}

cout您可以动态地分配数组,而不是静态地定义它

int i;
int **array;

in >> c;
array = new int*[c];

for(i=0;i<c;i++)
   array[i] = new int[c];

 adjmatrix(in, array,c);
inti;
整数**数组;
在>>c;
数组=新整数*[c];
对于(i=0;i以下内容可能会有所帮助:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

void print_adjacency_matrix(const std::vector<std::vector<int>>& mat)
{
    std::cout << "Adjacency Matrix" << std::endl;

    std::cout << mat.size() << std::endl;
    for(std::size_t i = 0; i != mat.size(); ++i) {
        std::cout << i << "   ";
        for(auto e : mat[i]) {
            std::cout << e << " ";
        }
        std::cout << std::endl;
    }
    std::cout << std::endl;
}

void print_adjacency_list(const std::vector<std::vector<int>>& mat)
{
    std::cout << "Adjacency List" << std::endl;
    std::cout << mat.size() << std::endl;
    for (std::size_t i = 0; i != mat.size(); ++i) {
        std::cout << i << " --> ";
        for(auto e : mat[i]) {
            if (e == 1) {
                std::cout << e << " ";
            }
        }
        std::cout << std::endl;
    }
}

int main()
{
    std::ifstream in;
    std::string infile;

    std::cout << "Please enter the input data file name(NO SPACES): ";
    std::cin >> infile;

    in.open(infile);
    while(in.fail()) {
        std::cout << "Please enter a CORRECT input data file name(NO SPACES): ";
        std::cin >> infile;
        in.open(infile);
    }

    int c;
    in >> c;
    std::vector<std::vector<int> > array(c, std::vector<int>(c));

    int u, v;
    while(in >> u >> v) {
        array[u][v] = 1;
    }
    in.close();

    print_adjacency_matrix(array);
    print_adjacency_list(array);

    return 0;
}
#包括
#包括
#包括
#包括
无效打印邻接矩阵(常数标准::向量和矩阵)
{

STD:Cux> Cux> C > int数组[C][C];< /Cord>这不是标准的C++。必须用编译时表达式声明数组大小。使用<代码> STD::vector < /COD>或从<代码> INT**/CUDE中建立一个。如果由于某种原因,不能使用<代码>矢量< /代码>。不要忘记<代码> Dele[]/COD>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

void print_adjacency_matrix(const std::vector<std::vector<int>>& mat)
{
    std::cout << "Adjacency Matrix" << std::endl;

    std::cout << mat.size() << std::endl;
    for(std::size_t i = 0; i != mat.size(); ++i) {
        std::cout << i << "   ";
        for(auto e : mat[i]) {
            std::cout << e << " ";
        }
        std::cout << std::endl;
    }
    std::cout << std::endl;
}

void print_adjacency_list(const std::vector<std::vector<int>>& mat)
{
    std::cout << "Adjacency List" << std::endl;
    std::cout << mat.size() << std::endl;
    for (std::size_t i = 0; i != mat.size(); ++i) {
        std::cout << i << " --> ";
        for(auto e : mat[i]) {
            if (e == 1) {
                std::cout << e << " ";
            }
        }
        std::cout << std::endl;
    }
}

int main()
{
    std::ifstream in;
    std::string infile;

    std::cout << "Please enter the input data file name(NO SPACES): ";
    std::cin >> infile;

    in.open(infile);
    while(in.fail()) {
        std::cout << "Please enter a CORRECT input data file name(NO SPACES): ";
        std::cin >> infile;
        in.open(infile);
    }

    int c;
    in >> c;
    std::vector<std::vector<int> > array(c, std::vector<int>(c));

    int u, v;
    while(in >> u >> v) {
        array[u][v] = 1;
    }
    in.close();

    print_adjacency_matrix(array);
    print_adjacency_list(array);

    return 0;
}