Wpis z mikrobloga

@KrzaQ2: dla czytelności jasne :) ale i tak copy_n nie robi reserve/resize, a znając n i dalej robiąc push_back (o front nawet nie będę wspominał!) to głupota.

Przy kopiowaniu 20 liczb różnicy nie będzie, ale jak dostaniesz na wejście 10k to i owszem.
@KrzaQ2: wiem ;) ale i tak uważam, że sporo ludzi ma na to #!$%@?, bo przecież końcowy wynik będzie taki sam, dlatego cisnę ile się da, bo później ktoś napisze mi taki gówniany moduł, co na danych testowych śmiga fajnie, będę tego używał co chwilę do kilku milionów danych i się #!$%@?ł co tak wolno to działa...

Niestety ale kursy i inne materiały zazwyczaj uczą o tym jak dodać element do
@KrzaQ2: szczerze to wątpię, szczególnie dla dużych danych. Przy resize alokowana pamięć jest inicjalizowana domyślnym konstruktorem (dla typów prostych może być jakaś optymalizacja np. z memset'em) także na tym sporo czasu też straci. I tak będzie lepiej niż bez resize, ale wydaje mi się, że czytelniej (i lepiej) jest jednak używać reserve. Poza tym resize też musi porównywać, czy nowa wielkość jest (1) mniejsza od aktualnej (wtedy usuwa), (2)
Ale porównanie leci 1x, a nie n razy


@KrzaQ2: sugerujesz, że reserve robi porównanie n razy, gdzie n to nowy rozmiar? ( ͡° ͜ʖ ͡°)
Jak zrobisz to wrzuć test na ideone albo gdzieś, chętnie obejrzę też :) stawiam moje cebule na reserve.

@AferaZaAfera: no robisz albo resize() i podajesz begin() albo reserve() i podajesz back_inserter(). back_inserter będzie robił porównania, dereferencja iteratora nie. Cebul nie stawiam, bo coś mi się wydaje, ƶe
1) nie wiem
2) mocno zaleƶne od typu (memset i te sprawy)
3) po to sprawdzę, aby się dowiedzieć
@KrzaQ2:
**Miałeś rację z back_inserterem, jego porównania dają trochę w kość.** Na szczęście da się je całkowicie pominąć i przetestować resize vs reserve. Kod wraz z wynikami tutaj.

Wyniki z mojej maszyny VS2015 (bo wcześniejsze mają kiepski high_resolution_clock):

Resize [ms]: 1732.7

Reserve [ms]: 1477.66

Reserve (backinserter) [ms]: 5376.24


Więc najlepsze wyjście to reserve i kopia bezpośrednio do niego, gorsze to resize i kopia bezpośrednio do niego, a