2009-02-18 11 views
5

Uczę się C++, a książka, którą czytam (The C++ Programming Language) mówi, aby nie odkrywać koła, polegać na standardowych bibliotekach. W języku C często kończę tworzenie połączonej listy i wielokrotnie powtarzam iterację listy linków (być może robię to źle, nie jestem pewien), więc pomysły kontenerów dostępnych w C++ oraz łańcuchy i algorytmy naprawdę mi się podobają . Jednak przeczytałem trochę online i usłyszałem kilka uwag od moich przyjaciół i współpracowników na temat STL, więc pomyślałem, że może wybiorę tu trochę mózgów.Jakie są niektóre z najlepszych praktyk korzystania z Biblioteki Standardowej C++?

Jakie są najlepsze praktyki dotyczące używania STL i jakie wnioski wyciągnąłeś na temat STL?

+0

Byłbym zainteresowany skargami dotyczącymi STL, abyśmy mogli je zestrzelić. –

+0

Martin, moja skarga to łatwość użycia. kiedy potrzebuję przejść dwa iteratory, jest to w najlepszym razie niedogodność, aw najgorszym, duża niedogodność, np. count (obj.getVecByVal(). begin(), obj.getVecByVal(). end(), 5) niewiarygodnie nie (z powodu wykonywania iteracji na oddzielnych kopiach) - tak nazwany lokalny jest potrzebny –

+0

Martin - kiedy pojawiają się ponownie Napiszę nowe pytanie. Głównie chodziło o powolność i powolność. –

Odpowiedz

14

Istnieje książka towarzysząca do serii Effective C++, która nazywa się "Effective STL". To dobry punkt wyjścia do poznania najlepszych praktyk przy użyciu biblioteki Standard C++ (neé STL).

10

Może chcesz odebrać kopię "Effective C++: 50 konkretnych sposobów, aby poprawić swoje programy i wzornictwo (2nd Edition)":

http://www.amazon.com/Effective-Specific-Addison-Wesley-Professional-Computing/dp/0201924889

ja okazał się być bezcenne, i nadal jest bardzo aktualne, nawet jeśli nie programujesz w C++.

+0

Być może "skuteczne STL" tego samego autora byłoby bardziej na temat? –

+0

Czytanie wszystkich 3 jego książek w C++ to zdecydowanie najlepsza praktyka. – twk

+0

Awesome. Spojrzę na te książki. :) –

6

Jeśli naprawdę chcesz się uczyć Biblioteki Standardowej C++ (która zawiera takie rzeczy jak łańcuchy, które nie były tradycyjnie postrzegane jako część STL), potrzebujesz dobrej książki. Najlepszy w tej dziedzinie jest "The C++ Standard Library" by Nicolai Jossutis.

1

Należy rozumieć pojęcie szablonu i innych polimorfizmu, aby efektywnie wykorzystać STL.

1

, aby dowiedzieć się o STL, musisz zrozumieć szablony, a także powinieneś być dobry w strukturach danych.

3

Dlaczego nie powiecie nam tych krytyk, a my odpowiemy? Jeśli krytyka jest ważna, powiemy ci to. A jeśli nie, powiemy ci, dlaczego nie.

STL ma mieszaną historię, ponieważ początkowo 1) niewielu ludzi to rozumiało, a 2) kilka kompilatorów zaimplementowało ją poprawnie. Ale to było dziesięć lat temu. Dzisiaj? To działa. Jest wydajny. Rozwiązuje wiele problemów. Największym problemem jest to, że zajmuje trochę czasu, aby zawinąć głowę, jak to działa.

Najprostszą najlepszą praktyką jest "Używanie STL, gdy tylko oferuje funkcjonalność, której potrzebujesz". Ciężko jest udzielić bardziej szczegółowych porad, chyba że wiemy, z jakimi krytykami się borykają.

Zazwyczaj jest tak, że ludzie, którzy go krytykują to po prostu , a nie programistów C++. Programistów C, którzy nauczyli się korzystać z klas, należą do tej kategorii.

5

Jedyne przypadki, które mogę wymyślić z mojej głowy, gdy SC++ L nie jest odpowiedni do użycia, to niektóre rzadkie sytuacje, w których nie jest zapewniona odpowiednia implementacja (być może pracujesz nad niektórymi niejasnymi platforma, dla której zostały zaimplementowane jedynie ograniczone kompilatory C++) lub wymagana jest ekstremalna wydajność (być może dla kodu, który istnieje w rdzeniu systemu renderowania grafiki dla gier następnej generacji).

Jeśli używasz zwykłego komputera, masz 99% pewność, że nie jesteś w pierwszym przypadku.Jeśli chodzi o drugi przypadek, należy bezwzględnie rozważyć wdrożenie własnego zestawu kontenerów i algorytmów z powodów związanych z wydajnością, jeśli masz wystarczające dowody z dobrych narzędzi do profilowania, że ​​wąskim gardłem w twoim programie jest SC++ L.

Najlepszą praktyką w zakresie SC++ L jest po prostu użycie go, gdy tylko jest to możliwe. Ponadto prawie wszystkie współczesne kody C++ intensywnie używają Boost, co można uznać za doskonałe i masywne rozszerzenie do SC++ L. Kiedy tylko chcesz wykonać dość standardowe zadanie algorytmiczne, powinieneś użyć Google, aby sprawdzić, czy SC++ L lub Boost zapewniają gotowe, przetestowane, sprawdzone urządzenia do realizacji tego zadania.

2

STL został napisany przez najlepsze mózgi. Prawdopodobnie nie uda się uzyskać lepszej implementacji niż w większości przypadków. Jego wydajność jest dobra, jest wolna od błędów i jest dobrym standardem do przekazywania parametrów między metodami, interfejsami API, komponentami kodu i nie trzeba dodawać, że zawiera wszystkie brzydkie rzeczy. Chodzi o to, że musisz wiedzieć, jak wybrać odpowiedni pojemnik na swój problem. W przeciwnym razie możesz nie czerpać korzyści z tego. Istnieje kilka artykułów w sieci dotyczących wyboru właściwego pojemnika STL. Jeden dobry link: STL Containers , i ma ładny schemat, jak wybrać swój pojemnik.

Powiązane problemy