2016-01-25 19 views
5

„normalna” sposobem usuwania elementu z wektora idzie tak:std :: vector :: wymazać vs „swap i pop”

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

Ale teoretycznie to szybciej po prostu to zrobić:

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

Czy jest jakikolwiek powód, aby nie używać tego ostatniego?

+2

Potrzebujesz normalnego sposobu, aby zachować porządek. – zch

+1

Jeśli chcesz, aby usuwanie było szybkie, zawsze możesz skorzystać z listy połączonej. – CompuChip

+3

@CompuChip To skończy się wolniej niż drugi przykład, a listy z linkami są w zasadzie powolne domyślnie. – Veedrac

Odpowiedz

10

Drugi przypadek nie zachowuje porządku elementów w wektorze. Jeśli jest to posortowany wektor lub kolejność jest ważna, właśnie zepsułeś to w drugim przypadku, w którym pierwszy przypadek pozostawiłby nienaruszoną kolejność.

+1

A jeśli kolejność nie jest ważna, wektor prawdopodobnie nie byłby właściwym narzędziem dla każdej pracy. Chociaż są przypadki, w których kolejność nie ma znaczenia, że ​​wektor jest właściwym narzędziem: D –