2016-01-25 24 views
5

vs silmek bir vektör bir öğe silindikten "normal" yolu şöyledir:std :: vector :: "swap ve pop"

vec.erase(vec.begin() + index); 

Ama teoride daha hızlı sadece bunu yapmak için var:

if (vec.size() >= 2) 
{ 
    std::swap(vec.begin() + index, vec.end() - 1); 
    vec.pop_back(); 
} 
else 
{ 
    vec.clear(); 
} 

İkincisini kullanmamanın herhangi bir sebebi var mı?

+2

Siparişi korumanız gerekiyorsa normal şekilde ihtiyacınız vardır. – zch

+1

Hızlı olmak için silme işlemine ihtiyacınız varsa, her zaman bağlantılı bir liste kullanmayı düşünebilirsiniz. – CompuChip

+3

@CompuChip İkinci örnekten daha yavaş sonuçlanacak olsa da, bağlantılı listeler temelde yavaştır. – Veedrac

cevap

10

İkinci durum, vektördeki öğelerin sırasını korumaz. Bu sıralı bir vektörse veya sipariş önemliyse, o zaman ilk davada siparişi sağlam bırakan ikinci durumda kırılmışsınız demektir.

+1

Ve eğer sipariş önemli değilse, o zaman bir vektör, iş ne olursa olsun doğru araç değildi. Siparişin _so_ önemsiz olduğu bir durum olmasına rağmen, bir vektör doğru araç iştir: D –

İlgili konular