我对std::array边界检查有点困惑。
这是代码:

    const size_t studentResponses = 10;
    const size_t surveyBound = 6;

    std::array<unsigned int, studentResponses> students{ 1, 3, 5, 5, 5, 4, 5, 4, 2, 2 };
    std::array<unsigned int, surveyBound> survey{}; //initializes it to '0'

    for (size_t answer = 0; answer < students.size(); ++answer) {
        ++survey[students[answer]];
    }

    std::cout << "Rating" << std::setw(12) << "Frequency" << std::endl;

    for (size_t rating = 1; rating < survey.size(); ++rating) {
        std::cout << std::setw(6) << rating << std::setw(12) << survey[rating] << std::endl;
    }
输出:
Rating   Frequency
 1           1
 2           2
 3           1
 4           2
 5           4
我从未使用过一个数组作为另一个数组的计数器。通过阅读本书,我了解到students的'n'元素的值将成为调查元素的值,但是当显示输出时,这就是我的困惑所在。
  • 数组survey如何统计学生中element的值的多少次?
  • 由于数组survey初始化为6,如何从students获取10个值?

  • 我的教授并没有真正解释,只是从PowerPoint中阅读了一下,所以我想自己学习和理解它。

    最佳答案


    通过使用以下语句:

    ++survey[students[answer]];
    
    请注意,students数组必须仅包含0到5(含)之间的值。然后students[answer]的值用作survey的索引。然后,该索引处的值将增加。
    survey中没有10个位置,但是只有6个位置。相反,survey中所有值的总和将等于10。

    关于c++ - std::array边界检查如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62580051/

    10-10 08:08