2010-09-24 30 views
20

Diziyi bekleyen ve dolduran bir kitaplığım var. Bir dizi kullanmak yerine std :: vektör kullanmak istiyorum.Std :: vektörünü diziye dönüştür.

std::vector<int> array; 
object->getArray(array); 

Ama bunu yapmak için bir yol bulamıyor: Bunun yerine

int array[256]; 
object->getArray(array); 

I yapmak istiyorum. Bunun için std :: vector kullanma şansı var mı? Okumak için

teşekkürler!


DÜZENLEME: Ben bu soruna bir güncelleme yerleştirmek istiyorum: C++ 11 ile de oynuyordum ve daha iyi bir yaklaşım bulduk. Yeni çözüm, işaretçiyi ilk elemana almak için std :: vector.data() işlevini kullanmaktır.

std::vector<int> theVec; 
object->getArray(theVec.data()); //theVec.data() will pass the pointer to the first element 

biz daha iyi bu nedenle değişken adı için btw (yerine yeni veri türü std :: dizi kullanmak elemanlarının sabit miktarda bir vektör kullanmak istiyorsanız "dizi: yüzden aşağıdakileri yapabilirsiniz “Yukarıdaki soruda kullanılmış olan artık kullanılmamalıdır!”.

std::array<int, 10> arr; //an array of 10 integer elements 
arr.assign(1); //set value '1' for every element 
object->getArray(arr.data()); 

kod varyantları Hem Visual C++ 2010 hatırla düzgün çalışacaktır: Eğer özelliklerini destekleyen bir derleyici gerekir bu yüzden bu C++ 11 Kod olduğunu!

Aşağıdaki yanıt C++ 11'i kullanmıyorsanız hala geçerlidir!

+0

Olası çoğaltılabilir [Vektör, C++ dizisine nasıl dönüştürülür?] (Http://stackoverflow.com/questions/2923272/how-to-convert-vector-to-array-c) – Trilarion

cevap

26

Evet: bir vector içinde

std::vector<int> array(256); // resize the buffer to 256 ints 
object->getArray(&array[0]); // pass address of that buffer 

Elemanlar bir dizi gibi, bitişik olduğu garanti edilir.

+0

Works :) Teşekkür ederim! – SideEffect

+5

Ancak sıfır boyutlu dizilere dikkat edin. – ybungalobill

+0

Vektör yerleştirilirse ne olur? – alxx