我对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/