0

私はプログラミング プロジェクト (mancala) に取り組んでおり、配列の書き込み中にスタックしてしまいました。すべてのボード ビンを値 4 で埋め、2 つのビンを 0 にリセットする配列を作成する必要があります。

{

    int i;
    int beadArray[MAX] = {4};

    for (i = 0; i < MAX; i++)
    {
           beadArray[i] = -1;
    }

    for (i = 0; i < MAX; i++)
    {
            cout<<i<<"\t";

    }
4

2 に答える 2

1

ループを使用してインデックス 6 と 13 を埋めたいと指定したのはなぜですか? 2 つの値のみを入力する場合、ループは必要ありません。

これは mancala ゲーム専用であるため、255 (1 バイトが保持できる最大値) より大きい数値を使用する必要がない場合は、unsigned char 配列と memset を使用できます。

char beadArray[MAX];
memset( beadArray, 4, sizeof(beadArray));
beadArray[6] = beadArray[13] = 0;
for( int i = 0; i < sizeof(beadArray); i++)
    cout << beadArray[i] << "\t";
于 2012-04-25T05:59:41.417 に答える
1
int beadArray[MAX] = {4};

この行は、最初の要素を 4 に初期化し、残りを 0 に初期化します。すべての要素を 4 に初期化するわけではありません。

ベクトルを使用するものは、扱いやすく、将来的にはより良くなるでしょう:

std::vector<int> beadArray (MAX, 4); //MAX elements, initialized to 4
beadArray [indexToReset1] = 0; //reset one element
beadArray [indexToReset2] = 0; //reset other element

//print array - C++11
for (int bead : beadArray)
    cout << bead << '\t';

//print array - C++03, consider using std::for_each instead
for (vector<int>::const_iterator it = beadArray.begin(); it != beadArray.end(); ++it)
    cout << *it << '\t';

ベクトル以外のソリューション:

ベクトルがなくても、STL アゴリズムを使用できます。

int beadArray [MAX];

std::fill (beadArray, beadArray + MAX, 4);
beadArray [6] = beadArray [13] = 0; //just the two elements
std::fill (beadArray + 6, beadArray + 13, 0); //the range of elements from 6-13

配列を印刷するもう少し賢い方法は、ostream イテレータを使用することです。

std::copy (beadArray, beadArray + MAX, std::ostream_iterator<int> (std::cout, "\t"));

単純な C++:

int beadArray [MAX];

for (int i = 0; i < MAX; ++i)
    beadArray [i] = 4; //set every element to 4

beadArray [6] = beadArray [13] = 0; //set elements 6 and 13 to 0

for (int i = 0; i < MAX; ++i)
    cout << beadArray [i] << '\t'; //print each element separated by tabs
于 2012-04-25T03:28:31.860 に答える