C ++中的多维可变长度数组

时间:2018-07-02 19:10:09

标签: c++ multidimensional-array vector

void drawTable(int arg[], int length);

int main()
{
    int length=0;
    int counter=0;
    int *pointer2ArrSize = new int[length];

    cout << "Enter length of array: " << endl;
    cin >> length;

    do{
            for(int j=0; j<length; j++){
                cout << "Enter array elements: \n";
                cin >> pointer2ArrSize[j];
                cout << "You entered: " << pointer2ArrSize[j] << " in position: "
                     << j+1
                     << endl; 
            counter++;
            }
           cout << drawTable(pointer2ArrSize[j],length) << endl;
    }while(!counter == length);

    return 0;
}

void drawTable(int arg[], int length){
    for(int i=0; i<length; i++){
        cout << arg[i] << " ";
        cout << '/n';
    }
}
  

错误:从'int'到'int *'[-fpermissive]

的无效转换

我的目标是显示2D可变长度数组。我希望用户定义数组及其元素的长度。但是,对向量还不太熟悉。我该如何处理?

1 个答案:

答案 0 :(得分:0)

Key_firstTimestamp  Key_groupNum    Timestamp
7:58 PM                 1           7:58 PM
7:58 PM                 1           8:08 PM
7:58 PM                 1           8:12 PM
8:15 PM                 2           8:15 PM
8:15 PM                 2           8:20 PM

是错误的,因为cout << drawTable(pointer2ArrSize[j],length) << endl; 的参数类型为drawTable,并且您将int*传递给它,类型为pointer2ArrSize[j]

您需要使用

int

更重要的是,使用

cout << drawTable(pointer2ArrSize, length) << endl;

错了。

从用户接受数组的值后,该数组将不会被调整为int *pointer2ArrSize = new int[length]; cout << "Enter length of array: " << endl; cin >> length; 的大小。因此,length将继续是大小为pointer2ArrSize的数组。由于0仍然是大小为pointer2ArrSize的数组,因此任何尝试访问其元素的尝试都将导致未定义的行为。

在接受0的输入值之后,移动分配内存的行。

length

最好还是使用cout << "Enter length of array: " << endl; cin >> length; int *pointer2ArrSize = new int[length]; 。然后,您不必担心内存分配和释放。

std::vector

当然,您应该将cout << "Enter length of array: " << endl; cin >> length; std::vector<int> pointer2ArrSize(length); 更改为接受drawTable

std::vector<int>

不需要void drawTable(std::vector<int> const& arg); 作为length的第二个参数,因为您可以从drawTable获取数组的大小。