2011-04-20 38 views
49

的數組賦值,所以當你初始化數組,你可以在一個地方分配多個值給它:C++多個值

int array [] = {1,3,34,5,6} 

但如果陣列已經初始化,我想完全替代值該數組中的元素在一行中的

所以

int array [] = {1,3,34,5,6} 
array [] = {34,2,4,5,6} 

似乎不工作...

有沒有辦法做到這一點?

回答

41

初始化賦值之間存在差異。你想要做的不是初始化,而是分配。但是在C++中這樣的數組賦值是不可能的。

這裏是你可以做什麼:

#include <algorithm> 

int array [] = {1,3,34,5,6}; 
int newarr [] = {34,2,4,5,6}; 
std::copy(newarr, newarr + 5, array); 

然而,在C++ 0x中,你可以這樣做:

std::vector<int> array = {1,3,34,5,6}; 
array = {34,2,4,5,6}; 

當然,如果你選擇使用std::vector而不是原始數組。

+1

鏈接到在線演示不起作用 – 2014-03-23 18:51:50

+2

'標準::複製(STD ::開始(newarr)的std ::結束(newarr)的std ::開始(陣列));'會更好,不是嗎? – 2015-05-12 21:01:47

+0

@MattCruikshank:是的。但這在C++ 03中是不可能的。 – Nawaz 2015-05-13 03:19:55

6

你必須通過替換值的一個一個諸如在一個for循環或複製在另一種這樣的另一個陣列如使用memcpy(..)std::copy

例如

for (int i = 0; i < arrayLength; i++) { 
    array[i] = newValue[i]; 
} 

務必小心,以確保適當的邊界檢查和需要發生,以防止出界的問題進行任何其他檢查。

1
const static int newvals[] = {34,2,4,5,6}; 

std::copy(newvals, newvals+sizeof(newvals)/sizeof(newvals[0]), array);