C++ içindeki vektörler için memset
eşdeğer bir işlevi var mı?Memset on vector C++
(Not clear()
veya erase()
yöntem, ben sadece tüm değerleri başlatmak istiyoruz, vektör boyutunu korumak istiyoruz.)
C++ içindeki vektörler için memset
eşdeğer bir işlevi var mı?Memset on vector C++
(Not clear()
veya erase()
yöntem, ben sadece tüm değerleri başlatmak istiyoruz, vektör boyutunu korumak istiyoruz.)
Kullanım std::fill()
:
std::fill(myVector.begin(), myVector.end(), 0);
vektör POD türünü içerirse , üzerinde memset kullanmak güvenlidir - bir vektörün depolanması bitişik olduğu garanti edilir.
memset(&vec[0], 0, sizeof(vec[0]) * vec.size());
Düzenleme: sana tanımlanmamış bir terim atmak için Üzgünüz - POD Plain Old Data açılımı, yani C kullanılabilen türleri ve onlardan inşa yapıları.
Düzenleme tekrar: olarak bool
vector<bool>
ilginç bir istisnadır ve bunun üzerine memset kullanmaya çalışırsanız sefil başarısız olur, basit bir veri türü olmasına rağmen Açıklamalarda belirttiği. Adam Rosenfield's answer hala bu durumda mükemmel çalışıyor.
POD türü nedir? – avd
Teknik olarak, bir vektörün depolama alanı, C++ 03 standardı tarafından bitişik olarak% 100 garanti edilmez, ancak tüm uygulamalar bu şekilde uygulanır, bu yüzden MOR, POD tipleriyle gerçekten güvenlidir. C++ 0x, sorunu giderir ve tüm vektör uygulamalarının bitişik depolamayı kullanmasını gerektirir. –
"Eski eski veriler" - tamsayılar, yapılar (yalnızca POD içeren), chars ... – LiraNuna
başka yolu da, ben Meyers kitabında ilk gördüğümde düşünüyorum:
// Swaps with a temporary.
vec.swap(std::vector<int>(vec.size(), 0));
Onun tek dezavantajı bir kopyasını yapan şeydir.
Verimlilik konusunda endişeleriniz varsa, STL uygulamalarının çoğu, mümkünse memset yapan özel std :: fill uygulamalarına sahip olacaktır. – razeh