2013-06-13 189 views
1

在C++中,我們通常使用memset來設置所有的元素爲零,如:設置二維int數組元素1由memset的功能

int a[5][5]; 
memset(a,0,sizeof(a)); 

如果我想將所有詮釋元素?

memset(a, 1, sizeof(a)); 

不起作用,因爲我不能只設置了所有字節。

我不知道是否有功能類似memset設置所有elements不就是一個字節)到特定value

+2

看'的std :: fill'或'的std :: fill_n' – chris

+5

'在C++中,我們通常使用的memset來設置所有元素zero'不,不,我們沒有。我們在C++中使用更好的東西。你在想C嗎?你知道他們是不同的語言,對吧? –

+0

@LuchianGrigore我是C++中的一位綠色之手。我不知道C++中更高級的東西。你能建議一個將所有元​​素設置爲1嗎? – Zachary

回答

1

使用std::fill會的工作,但你必須訴諸使用reinterpret_cast<>,常常被認爲是不好的形式:

#include <algorithm> 

int a[5][5]; 
std::fill(reinterpret_cast<int*>(a), 
      reinterpret_cast<int*>(a)+(5*5), 
      1); 

或者,你可以採取的第一個元素,這同樣是笨重的地址:

std::fill(&a[0][0],&a[0][0]+(5*5),1); 
+0

或者你可以做一個循環。我認爲這樣做可能是UB沿着第一維的界限指針運算的界限,即使它在整個數組中,但我不完全確定它是否在這裏。 – chris