使用相同的值填充数组,循环以重置值

时间:2012-04-25 03:25:38

标签: c++ arrays loops numbers constants

我正在编写一个编程项目(mancala)并且在编写数组时遇到了困难。我需要编写一个数组,用四个值填充所有电路板箱,然后将两个箱重置为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";

    }

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

为什么要指定要使用循环填充索引6和13?如果您只填写两个值,则不需要循环。

由于这仅适用于mancala游戏,如果您不需要使用大于255的数字(单个字节可以容纳的最大值),那么您可以使用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";