Pytanie o wektor vs walarray zostało już zadane here. Moje pytanie dotyczy konkretnie przypadku C++ 11. Czytałem "A Tour of C++" i "The C++ Programming Language". Obie książki zostały napisane przez Bjarne Stroustrup. W pierwszej książce autor wyjaśnia, że do obliczeń numerycznych powinno być preferowane std::valarray
(rozdział 12). Ale w drugiej książce, w rozdziale 29, autor implementuje klasę Matrix w kategoriach std::vector
.C++ 11: czy powinienem używać valarray lub wektor do obliczeń numerycznych
Również wykonując trochę googling, wydaje się, że pod względem wydajności, std::vector
jest tak samo szybki, jak dynamicznie przydzielane "surowe tablice".
Tak więc w kontekście C++ 11, który pojemnik powinien być preferowany do obliczeń numerycznych?
My się na to byłoby to, że od std::vector
zapewnia szybki dostęp do jego zawartości przy użyciu operator[]
(która zwraca odwołanie do danych bez żadnych granic sprawdzania) i że jest również bezpieczniejsze w użyciu std::vector
nad dynamicznie przydzielonego tablicy , Preferowane powinno być std::vector
. Również z C++ 11 r:
std::vector
zapewnia bezpośredni dostęp do podstawowych danych z wykorzystaniemstd::vector::data()
- std :: vector może być zmieniany w celu użycia mniejszej ilości pamięci używając
std::vector::shrink_to_fit()
Dlaczego nie można zmierzyć i sprawdzić, który byłby szybszy. W nowoczesnym świecie C++, std :: vector powinien być użyty jako domyślny kontener, chyba że mamy powód, aby tego nie robić. –