【问题标题】:How to check if an element of a 3d array is empty?如何检查 3d 数组的元素是否为空?
【发布时间】:2020-04-20 10:11:02
【问题描述】:

我有一个填充的 3d 数组和一个打印每个 2d 数组的选定行的函数,但是如果选定的行(从第一个数组开始)为空,它应该打印“行为空”,我不知道如何检查它是否为空。 我尝试了以下方法:

void printrow(int X[][4][5], int row){
    if(X[0][row][0]==0){
        cout <<"row empty";
    }
    else{
        for(int i=0; i < 4; i++){
            for(int j=0; j < 5;j++){
                cout << X[i][row][j] << " ";
             }
        }
        cout << endl;  
    }
}

也许我应该使用指针?如果是,怎么做?

【问题讨论】:

  • 空是什么意思?没有“空” int 这样的东西。
  • 我的意思是它已经初始化但没有得到分配给它的值,所以它是0(?)
  • 如果它已经被初始化,那么它确实有一个值。如果尚未初始化,则无法“检测”。
  • 如果您想检查元素是否为0,那么您的代码就是这样做的。请附上minimal reproducible example 并说明您的代码没有按照您希望的方式执行,包括实际和预期的输出帮助
  • 那我该怎么做呢?如果我有 3 个二维数组并且只填充每个数组的第一行,如何检查第二行是否已填充?

标签: c++ arrays pointers multidimensional-array


【解决方案1】:

您可以使用std::optional

void printrow(std::array<std::array<std::array<std::optional<int>, 3>, 4>, 5> X, int row){
    if(!X[0][row][0].has_value()){
        cout <<"row empty";
    }
    else{
        for(int i=0; i < 4; i++){
            for(int j=0; j < 5;j++){
                cout << X[i][row][j].value() << " ";
             }
        }
        cout << endl;  
    }
}

【讨论】:

  • 你的回答很好。但是 OP 仍然在 C 上,使用 C 样式数组并且不理解指针衰减或如何通过引用或指针传递 C 样式数组的正确方法。所以,再次,好和+1。但 OP 还有其他问题。 . .
猜你喜欢
  • 2013-07-20
  • 2019-05-14
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 2017-09-05
相关资源
最近更新 更多