Która metoda jest szybsza i ma mniej narzutów?czyszczenie wektora lub definiowanie nowego wektora, który jest szybszy
Metoda 1:
void foo() {
std::vector<int> aVector;
for (int i = 0; i < 1000000; ++i) {
aVector.clear();
aVector.push_back(i);
}
}
Metoda 2:
void foo() {
for (int i = 0; i < 1000000; ++i) {
std::vector<int> aVector;
aVector.push_back(i);
}
}
Można powiedzieć, że przykład nie ma sensu! Ale to tylko fragment z mojego wielkiego kodu. W skrócie chcę wiedzieć lepiej jest
„stworzyć wektor raz i wyczyścić go do użytku”
lub
„Utwórz nowy wektor każdym razem”
UPDATE
Dzięki za sugestie, przetestowałem oba i tutaj są wyniki
Metoda 1:
$ time ./test1
real 0m0.044s
user 0m0.042s
sys 0m0.002s
Metoda 2:
$ time ./test2
real 0m0.601s
user 0m0.599s
sys 0m0.002s
Usuwanie wektor jest lepiej. Może to pomogę komuś innemu :)
"czyszczenie wektora lub definiowanie nowego wektora, który jest szybszy" - porównuj go i poznaj. Nie można sformułować ogólnego stwierdzenia, ponieważ zależy to od wielu szczegółów związanych z platformą i implementacją. –
Zgadzam się, ale chcę wiedzieć, jak g ++ generuje zoptymalizowany kod dla metod. Który z nich jest lepszy dla kompilatora? – mahmood
Spodziewałbym się, że metoda "czysta" będzie szybsza, jeśli wystąpią jakiekolwiek różnice. –