如何使用基于范围的for循环将2D数组初始化为false

时间:2016-03-08 03:18:55

标签: c++ arrays

我目前很难尝试使用范围基础for循环来初始化我的数组。

我目前做了什么,但它没有在构造函数中使用C ++ 11 Array。构造函数为void且不带参数

//sets everything to flase
for (size_t rowCount = 0; rowCount < NROWS; ++rowCount) {
    for (size_t colCount = 0; colCount < NCOLS; ++colCount){
        m_Floor[rowCount][colCount] = STARTING_PEN_POSITION;
    }
}

到目前为止,我将所有内容设置为false(起始笔位置)

for (auto const &row : m_Floor) {
    for (auto const &column : row) {
        //something = STARTING_PEN_POSITION;
    }
}

并且此数组位于头文件

std::array <std::array <bool, NCOLS>, NROWS> m_Floor;

其中NCOLS是size_t的常量静态值,值为70

和NROWS是size_t的常量静态值,值为22

1 个答案:

答案 0 :(得分:0)

我对你的问题的含义不是很清楚所以我会将答案发给我上面可以看到的两个可能的问题。第一个原因是基于for循环的范围中的初始化不起作用的原因。正如评论中指出的那样,你需要删除const。参考以下可编辑程序

#include <iostream>
#include <array>
using std::array;
using std::cout;
using std::endl;

int main() {

    array<array<int, 10>, 10> two_dimensional_array;
    for (auto& arr : two_dimensional_array) {
        for (auto& ele : arr) {
            ele = 0;
        }
    }

    // print all the values
    for (auto arr : two_dimensional_array) {
        for (auto ele : arr) {
            cout << ele << " ";
        }

        cout << endl;
    }

    return 0;
}

我推断的另一个问题是你想要一个很好的方法在构造函数的一行中初始化你的二维数组。您可以使用vector来实现此目的。它们是动态数组,通常是超级优化的。您可以使用vector构造函数初始化对象。参考以下代码

#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::vector;

int main() {

    vector<vector<int>> two_dimensional_vector (10, vector<int> (10, 5));
    for (auto& vec : two_dimensional_vector) {
        for (auto ele : vec) {
            cout << ele << " ";
        }

        cout << endl;
    }

    return 0;
}

请注意,我没有使用uniform initialization syntax,因为这是令人困惑的地方之一