2011-04-20 20 views
49

así al inicializar una matriz, se pueden asignar múltiples valores a ella en un punto:C++ asignación de matrices de múltiples valores

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

pero lo que si la matriz ya está inicializado y quiero reemplazar por completo los valores de los elementos de esa matriz en una línea

por lo

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

no parece funcionar ...

¿hay alguna manera de hacerlo?

Respuesta

41

Hay una diferencia entre inicialización y asignación. Lo que quiere hacer no es inicialización, sino asignación. Pero tal asignación a la matriz no es posible en C++.

Esto es lo que puede hacer:

#include <algorithm> 

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

Sin embargo, en C++ 0x, usted puede hacer esto:

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

Por supuesto, si usted elige utilizar std::vector en lugar de matriz sin procesar.

+1

Enlaces a demostraciones en línea no funcionan –

+2

'std :: copia (std :: begin (newarr), std :: extremo (newarr), std :: comienzan (matriz));' sería mejor ¿No es así? –

+0

@MattCruikshank: Sí. Pero eso no fue posible en C++ 03. – Nawaz

6

usted tiene que reemplazar los valores de uno en uno como en un bucle for o copiar otra matriz sobre otro como el uso de memcpy(..) o std::copy

por ejemplo

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

Tenga cuidado para garantizar la adecuada comprobación de límites y cualquier otro tipo de comprobación que tiene que ocurrir para evitar que un problema fuera de los límites.

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

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