2011-04-20 20 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);