【问题标题】:Filling an array with the same value, looping to reset values用相同的值填充数组,循环重置值
【发布时间】:2012-04-25 03:25:37
【问题描述】:

我正在开发一个编程项目 (mancala),但在编写数组时遇到了问题。我需要编写一个数组,用值 4 填充所有板箱,然后将两个箱重置为 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。无论如何,如果你需要填充的数组索引是连续的,你可以使用std::fill。但我更喜欢以前的做法,因为它们是 2 个数组元素。

标签: c++ arrays loops numbers constants


【解决方案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

【讨论】:

  • 假设我不想使用向量 - 我只想用 4 填充所有值,然后使用循环用 0 填充位置 6 和 13。我该怎么做?跨度>
  • @chrisvx930,我已经更新了答案以提供不使用向量的情况。它使用的算法是让你的生活更轻松,所以使用它们! :)
  • 再次感谢您 - 问题是我想让它尽可能简单。我绝对是一个初学者,我无法真正理解你到目前为止发布的内容。不过,我非常感谢您提供的帮助,如果您能以简单的方式帮助我解决此问题,我将不胜感激!
  • @chrisvx930,好的。一旦你学习了更多的 C++,算法/向量绝对值得一看。
【解决方案2】:

为什么指定要使用循环来填充索引 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";

【讨论】:

    猜你喜欢
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 2011-08-18
    • 2012-09-27
    • 1970-01-01
    • 2020-09-11
    相关资源
    最近更新 更多