Wiem, że na przyjęcie jest już późno, ale zmiany czasu i odpowiedzi pozostają w pobliżu. C ++ 11 ma dość duże zmiany, z których wiele ma na celu zwiększenie wydajności C ++ i biblioteki standardowej. Wygląda na to, że ci, którzy nie używają STL lub Boost, również nie nadążają za nowymi standardami, pozostawiając rozwiązania domowe bez istotnych ulepszeń, oczywiście nie zawsze tak jest.
Użyłem STL do każdego projektu od połowy lat 90. do dziś, z wyjątkiem krótkiego czasu w EA. Myślę, że strona anty-STL miała jakieś racjonalnie uzasadnione powody, aby jej nie używać. Te w dużej mierze zniknęły. Niestandardowe alokatory to jedno rozwiązanie, użycie rezerwy to drugie, a nieprzekazywanie wartości po wartości to trzecie, ale są one dość proste i każdy programista powinien je znać. Ważniejsze jest jednak użycie algorytmów. Autorzy kompilatorów dokładnie wiedzą, co robi funkcja for_each () i mogą zoptymalizować kod. Nie może się to zdarzyć w przypadku pętli domowej. For_each () na obiekcie const jest jeszcze lepszy. Microsoft optymalizuje for_each na wiele sposobów, w tym serializacji. Mają także bibliotekę AMP, która ma parallel_for_each (). Jeśli masz szansę, porozmawiaj o tym z inżynierami kompilatorów. Kompilatory konsoli zoptymalizują to, co zostanie wykorzystane, więc „ trochę problemu z jajkiem i kurczakiem. Microsoft idzie bardzo ciężko z C ++ 11 i następny XBox nie będzie inaczej. Nie mam pojęcia o PS4, jeszcze go nie mamy.
Niestandardowe alokatory to jeden ze sposobów radzenia sobie z problemem z pamięcią, ale inną (często pomijaną) opcją jest użycie nowej i usunięcia na podstawie klasy. W ten sposób można uzyskać ogromny wzrost wydajności.
Pogląd, że Boost i STL mają wąski pogląd na rozwiązywanie problemów, jest czystym szaleństwem. Jestem zaskoczony, jak wiele rzeczy w STL i Boost można dostosowywać za pomocą cech i zasad. Wyszukaj ciąg znaków niezależny od wielkości liter jako przykład.
Jeśli chodzi o długi czas połączenia i rozdęcie kodu, nowy szablon zewnętrzny powinien w tym pomóc. Generalnie uważam, że długie czasy kompilacji wynikają z nadmiernego sprzężenia i niewłaściwego użycia pch.
Najbardziej przekonującym powodem używania STL w porównaniu z samodziałem jest to, że są miliony ludzi, którzy mogą ci pomóc z STL. Jak zawsze, nie optymalizuj przedwcześnie i testuj, testuj, testuj.