2011-04-20 35 views
49

dizisi atama böylece, tek bir noktada kendisine birden fazla değer atayabilirsiniz:C++ birden çok değer

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

ama ne dizisi zaten başlatıldı ve tamamen değerleri değiştirmek istiyor ise tek satırda o dizideki öğelerin

yüzden

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

... çalışmak için görünmüyor

bunun için bir yolu var mı?

cevap

41

başlatma ve atama arasında bir fark vardır. Ne yapmak istediğiniz, başlatma değil, atama. Ancak diziye böyle bir atama C++ 'da mümkün değildir. İşte

yapabileceğiniz budur:

#include <algorithm> 

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

Ancak C++ 0x ile, bunu yapabilirsiniz: Elbette

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

, sen std::vector kullanmayı seçerseniz ham dizi yerine. Online demoları

+1

Linkler –

+2

'std :: kopya çalışmaz (std :: başlayacak (newarr), std :: sonu (newarr), std ::) (dizi başlamadan);' daha iyi olurdu değil mi? –

+0

@MattCruikshank: Evet. Ancak bu C++ 03'te mümkün değildi. – Nawaz

6

irtibat değerleriyle değiştirmek zorunda böyle olduğu gibi, bir döngü için veya örneğin memcpy(..) veya std::copy

kullanarak gibi başka bir tür üzerinde bir dizi kopyalama

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

dikkatli olun uygun sınırlar denetimine ve sınırları sorunun bir alıkoyarak gerçekleşmesi gereken başka denetim sağlamak için.

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

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