我正在尝试将二维数组传递给c ++中的函数。问题是它的维度不是普遍常数。我将维度作为用户的输入,然后尝试传递数组。这就是我所做的:
/*
* boy.cpp
*
* Created on: 05-Oct-2014
* Author: pranjal
*/
#include<iostream>
#include<cstdlib>
using namespace std;
class Queue{
private:
int array[1000];
int front=0,rear=0;
public:
void enqueue(int data){
if(front!=(rear+1)%1000){
array[rear++]=data;
}
}
int dequeue(){
return array[front++];
}
bool isEmpty(){
if(front==rear)
return true;
else
return false;
}
};
class Graph{
public:
void input(int matrix[][],int num_h){ //this is where I am passing the matrix
int distance;
char ans;
for(int i=0;i<num_h;i++){
for(int j=0;j<num_h;j++)
matrix[i][j]=0;
}
for(int i=0;i<num_h;i++){
for(int j=i+1;j<num_h;j++){
cout<<"Is there route between houses "<<i<<" and "<<j<<": ";
cin>>ans;
if(ans=='y'){
cout<<"Enter the distance: ";
cin>>distance;
matrix[i][j]=matrix[j][i]=distance;
}
}
}
cout<<"The matrix is: \n";
for(int i=0;i<num_h;i++){
cout<<"\n";
for(int j=0;j<num_h;j++)
cout<<matrix[i][j]<<"\t";
}
}
};
int main(){
Graph g;
int num_h;
cout<<"Enter the number of houses: ";
cin>>num_h;
int matrix[num_h][num_h];
g.input(matrix,num_h); //this is where I get an error saying
// Invalid arguments ' Candidates are: void input(int (*)[],
// int) '
return 0;
}
非常感谢。谢谢。
答案 0 :(得分:2)
代码中的问题:
问题1
void input(int matrix[][],int num_h){
无效的C ++。在多维数组中,除第一维之外的所有维都必须是常量。有效的声明是:
// Define a constant at the start of the file.
const int MATRIX_SIZE 200;
void input(int matrix[][MATRIX_SIZE],int num_h){
问题2
int matrix[num_h][num_h];
无效的C ++。 C ++不支持VLA。
建议的解决方案
使用std::vector<std::vector<int>>
捕获2D阵列。
更改
void input(int matrix[][],int num_h){
到
void input(std::vector<std::vector<int>>& matrix){
// You can get the size by calling matrix.size()
// There is no need to pass num_h as an argument.
将主叫代码更改为:
int main(){
Graph g;
int num_h;
cout<<"Enter the number of houses: ";
cin>>num_h;
// Construct a 2D array of size num_h x num_h using std::vector
std::vector<std::vector<int>> matrix(num_h, std::vector<int>(num_h));
g.input(matrix);
return 0;
}
答案 1 :(得分:0)
不是传递整个矩阵,而是将指针传递给矩阵。要有效地执行此操作,您需要将矩阵视为2D,但将其作为矢量处理,或使用矢量矢量。
考虑到第一种情况,你会:
int matrix[num_h * num_h];
和
g.input(matrix,num_h)
到
void input(int *matrix,int num_h)
并使用
访问元素matrix[i * num_h + j] = 0;