Mam trzy pytania dotyczące zamiany, najprawdopodobniej dość podstawowe dla ciebie.Pytania dotyczące wydajności zamiany
(1) w odniesieniu do dwóch takich samych pojemników typu STL a
i b
, obie operacje poniżej będzie działać
swap(a,b);
a.swap(b);
Rozumiem, że drugi specjalizuje się w pojemniku (np polega tylko kilka iterator swaps), podczas gdy pierwszy jest globalnym algorytmem przeznaczonym do pracy z typowymi typami danych i wykonuje wewnętrzną kopię-konstrukt.
Moje pytanie brzmi: jeśli napiszę pierwszy, czy kompilator użyje drugiego bez względu na to, czy muszę uważać, aby sprawdzić, czy istnieje odpowiednia specjalizacja?
(2) Czy swap(a,b)
dałby taki sam efekt z swap(b,a)
? Jeśli konstrukt kopii jest zaangażowany, a obiekty mają znacznie różny rozmiar, podejrzewam, że może to mieć znaczenie?
(3) W przypadkach, gdy przeciążony operator ==
istnieje i jest relatywnie szybki, sprawdzenie przed a == b
ma sens w celu uniknięcia niepotrzebnych operacji. Czy std::swap
stosuje tę kontrolę w pierwszej kolejności, czy też wykonuje operację niezależnie?
Dziękujemy za poświęcony czas!
Czy to nie wszystko zależy od konkretnej implementacji STL? Nie sądzę, abyś mógł czerpać to ze standardu. –
Numer 3 może być zależny od implementacji. 1 jest jednoznacznie wymagane. –
Dziękuję bardzo za szybką odpowiedź. – Chrys