Burada birçok cevap var ve hemen hemen hepsi işi halledecek.
Ancak bazı yanıltıcı tavsiyeler var!
Seçenekler şunlardır:
vector<int> dataVec;
int dataArray[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
unsigned dataArraySize = sizeof(dataArray) / sizeof(int);
// Method 1: Copy the array to the vector using back_inserter.
{
copy(&dataArray[0], &dataArray[dataArraySize], back_inserter(dataVec));
}
// Method 2: Same as 1 but pre-extend the vector by the size of the array using reserve
{
dataVec.reserve(dataVec.size() + dataArraySize);
copy(&dataArray[0], &dataArray[dataArraySize], back_inserter(dataVec));
}
// Method 3: Memcpy
{
dataVec.resize(dataVec.size() + dataArraySize);
memcpy(&dataVec[dataVec.size() - dataArraySize], &dataArray[0], dataArraySize * sizeof(int));
}
// Method 4: vector::insert
{
dataVec.insert(dataVec.end(), &dataArray[0], &dataArray[dataArraySize]);
}
// Method 5: vector + vector
{
vector<int> dataVec2(&dataArray[0], &dataArray[dataArraySize]);
dataVec.insert(dataVec.end(), dataVec2.begin(), dataVec2.end());
}
Uzun lafın kısası Yöntem 4, vektör :: insert kullanmak, bsruth'un senaryosu için en iyisidir.
İşte bazı kanlı ayrıntılar:
Yöntem 1 muhtemelen anlaşılması en kolay olanıdır. Dizideki her bir öğeyi kopyalayın ve vektörün arkasına itin. Ne yazık ki, yavaş. Bir döngü olduğu için (kopyalama işleviyle ifade edilir), her öğe ayrı ayrı ele alınmalıdır; Dizi ve vektörlerin bitişik bloklar olduğunu bildiğimiz gerçeğine dayanarak hiçbir performans iyileştirmesi yapılamaz.
Yöntem 2 , Yöntem 1 için önerilen bir performans iyileştirmesidir; diziyi eklemeden önce boyutunu önceden ayırmanız yeterlidir. Büyük diziler için bu yardımcı olabilir . Bununla birlikte, buradaki en iyi tavsiye, profil oluşturma bir iyileştirme elde edebileceğinizi (veya yineleyicilerinizin geçersiz kılınmayacağından emin olmanız gerektiğini) önermedikçe, asla rezerv kullanmamaktır. Bjarne aynı fikirde . Bu arada, neden düzenli olarak yöntem 1'den önemli ölçüde daha yavaş olduğunu kapsamlı bir şekilde açıklamakta zorlansam da , bu yöntemin çoğu zaman en yavaş performans gösterdiğini buldum ...
Yöntem 3 eski okul çözümüdür - soruna biraz C at! POD türleri için iyi ve hızlı çalışır. Memcpy vektörün sınırları dışında çalıştığından ve bir vektöre boyutunun değiştiğini söylemenin bir yolu olmadığından bu durumda yeniden boyutlandırmanın çağrılması gerekir. Çirkin bir çözüm olmasının yanı sıra (bayt kopyalama!), Bunun yalnızca POD türleri için kullanılabileceğini unutmayın . Bu çözümü asla kullanmam.
Yöntem 4 , gitmenin en iyi yoludur. Anlamı açıktır, (genellikle) en hızlısıdır ve herhangi bir nesne için işe yarar. Bu uygulama için bu yöntemi kullanmanın bir dezavantajı yoktur.
Yöntem 5 , Yöntem 4'te yapılan bir düzeltmedir - diziyi bir vektöre kopyalayın ve ardından ekleyin. İyi seçenek - genellikle hızlı ve net.
Son olarak, diziler yerine vektörleri kullanabileceğinizi biliyorsunuz, değil mi? Bir işlev c-tarzı diziler beklediğinde bile vektörleri kullanabilirsiniz:
vector<char> v(50); // Ensure there's enough space
strcpy(&v[0], "prefer vectors to c arrays");
Umarım bu dışarıdaki birine yardımcı olur!