2012-07-17 66 views
0

的数组我正在用C++编写一个程序,我试图用值声明一个数组,但只有这个值只设置为数组中的第一个成员。声明一个值为

char mines[100][100] = {'0'}; 
+2

我不确定你想问什么。你是否试图将矿井阵列的每个成员设置为0,或者你是否试图将第100个元素的第100个成员设置为0? – alexy13 2012-07-17 14:06:17

+2

以这种方式使用的初始化列表将专门设置所有包含的值,不包含的所有内容都将初始化为0. – Chad 2012-07-17 14:09:54

回答

0

我通常使用for循环来初始化所有值。据我所知,你只能通过列表进行初始化,而不是所有元素的默认值。

+1

我认为Luna正在尝试这样做:http://stackoverflow.com/questions/629017/ – coelhudo 2012-07-17 14:08:54

+0

是的,我试图做这个问题一样,并使用循环将使程序运行较慢 – 2012-07-17 14:12:41

2

在每个维度使用std::fill

for (int i = 0; i < 100; ++i) 
    std::fill (mines[i], mines[i] + 100, '0'); 

还是在C++ 11:

for (auto &chars : mines) 
    std::fill (std::begin (chars), std::end (chars), '0'); 

更容易,使用的事实,阵列是连续的,你可以保存自己的循环:

std::fill (mines, mines + 100*100, '0'); 

为了消除那里的幻数,正如Shahbaz指出的那样,将mines + 100*100sizeof(mines)

2

如果你不想写或产生10000元的初始化列表,你可以这样做:

char mines[100][100]; 
memset(mines, '0', sizeof(mines)); 
+0

好点,我一直忘记这些东西连续出于某种原因。 – chris 2012-07-17 14:09:59

+0

@chris这不适合我。 :)))) – 2012-07-17 14:10:30

+0

嗯,他们是0,不是'0'。也许就是这样。 – chris 2012-07-17 14:10:56

0

你只会初始化做

char mines[100][100] = {'0'}; 

其余的第一要素将使用0进行初始化(值不是字符),您将需要一个循环。像这样:

int row, column; 
for (row = 0; row < 100; row++) 
    for (column = 0; column < 100; column++) 
     mines[row][column] = '0'; 
+0

'='0''将无法正常工作。 '= {{'0'}}'会。 – Shahbaz 2012-07-17 14:12:43

+0

我知道这个解决方案,但它会让程序变慢 – 2012-07-17 14:18:57

+0

为什么?这应该是最快的方法之一。 – qwertz 2012-07-17 15:17:30

0

Luna,这被称为零初始化器,只能将所有值初始化为零对应的值:空指针,零。如果你尝试将char初始化为0,它将起作用,但其他任何值都不会。

更多信息here

#include <iostream> 

int main(int argc, char *argv[]) 
{ 
    int value[2][2] = {0}; 

    for(int i = 0; i < 2; ++i) 
     for (int j = 0; j < 2; ++j) 
      std::cout << (value[i][j] == 0) << std::endl; 

    return 0; 
} 

输出:

如果您需要一个特定的值进行初始化,在我看来Luchian与memset的最佳解决方案。