在c ++中循环遍历数组

时间:2013-05-21 00:18:40

标签: c++ arrays loops count

我想循环遍历一个最大值为1000的数组。我使用文本文件中的值填充数组。我试图循环遍历该数组,但在我的for循环中,我不知道数组的长度,所以我不知道在for循环语句的第二部分放什么。例如:我有一个名为int scores[1000];的数组,我试图遍历此数组并将分数放入成绩类别。所以A = 90-100,B = 80-89,C = 70-79,D = 60-69,F = 0-59。

所以我不知道我的for循环会是什么样子:

for(int i = 0; i < ...; i++){

if(scores[i] > = 90 || scores[i] <= 100){

//Do stuff...

}

我想我也很困惑如何在最后获得每个类别的总计数。但在大多数情况下,它如何迭代这个数组。我知道sizeof(scores [])不会工作,因为这会给我int大小而不是数组本身的长度。提前谢谢!

4 个答案:

答案 0 :(得分:6)

如果您使用std::vectorlink),则可以添加元素并让矢量动态更改大小。可以使用size()方法轻松查询该大小。如果你使用这样的数组,你必须自己跟踪它中的元素数量。

如果你有一个带有元素的向量文件,你的循环可能如下所示:

std::vector<int> scores;
// fill vector

for (unsigned int i=0; i<scores.size(); i++) {
  // use value
}

如果你必须使用数组,并且实际上有一个scoreCount变量,其中包含了实数值,只需在你的循环中使用它:

for (int i=0; i<scoreCount; i++) {
  // use value
}

正如我在评论中提到的,第三个选项是使用您从未使用的值(通常为-1)初始化整个数组,然后将其用作填充与空数组位置的标记,如下所示:

for (int i=0; i<1000; i++) {
    scores[i] = -1;
}

// add real values to scores 

int i=0;
while (scores[i] != -1 && i < 1000) {
  // use value
  i++;
}

答案 1 :(得分:6)

实际上sizeof()应该这样做:

sizeof(scores) / sizeof(scores[0])

这将为您提供数组的总元素数。

答案 2 :(得分:2)

填充scores数组时,您需要实际计算放入其中的项目数。然后你记住那个数字,然后用它进行迭代。例如,您可能已经读过这样的分数:

// Read some scores: Stop when -1 is entered, an error occurs, or 1000 values are read.
int num_scores = 0;

for( ; num_scores < 1000; num_scores++ )
{
    if( !(cin >> scores[num_scores]) || scores[num_scores] == -1 ) break;
}

// Do stuff with scores...
for(int i = 0; i < num_scores; i++) {
    ...
}

还有其他一些选择需要考虑:

  • 使用sentinel值表示数据的结尾,例如得分为-1。
  • 使用std::vector代替。

顺便说一句,循环中的逻辑语句将始终为true。您确定不想使用&&代替||吗?

答案 3 :(得分:2)

如果您真的想要使用固定大小的容器,请使用std::array代替现代C ++而不是C数组:

#include <array>

std::array<std::int32_t, 1000> scores;

for (std::size_t i{0}; i < scores.size(); ++i) {
  // Do stuff...
}

否则使用std::vector

#include <vector>

std::vector<std::int32_t> scores;

for (std::size_t i{0}; i < scores.size(); ++i) {
  // Do stuff...
}

如果您能够使用C ++ 11,我还建议使用固定宽度整数类型。