7

最大値が 1000 の配列をループ処理したいと考えています。配列にテキスト ファイルの値を入力しています。その配列をループしようとしていますが、for ループでは配列の長さがわからないため、for ループ ステートメントの 2 番目の部分に何を入力すればよいかわかりません。例:: という配列があり、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

4 に答える 4

8

実際には、次のsizeof()ように行う必要があります。

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

これにより、配列の合計要素数が得られます。

于 2013-05-21T01:48:52.100 に答える
6

std::vector代わりに( link )を使用すると、要素を追加して、ベクトルのサイズを動的に変更できます。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
}

コメントで述べたように、3 番目のオプションは、使用していない値 (通常は -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++;
}
于 2013-05-21T00:21:26.007 に答える
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 を使用できる場合は、固定幅の整数型を使用することもお勧めします。

于 2014-07-28T10:31:51.640 に答える
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++) {
    ...
}

考慮すべき他のオプションがいくつかあります。

  • -1 のスコアなど、データの終わりを表すためにセンチネル値を使用します。
  • 代わりにa を使用しstd::vectorます。

ちなみに、ループ内の論理ステートメントは常に true になります。&&の代わりに使用するつもりはありませんでした||か?

于 2013-05-21T00:28:05.047 に答える