Harion Temat założony przez niniejszego użytkownika |
[C++] STL » 2016-03-21 10:01:29 Witajcie mam do was pytanie odnośnie biblioteki STL. Jako początkujący programista ciężko jest mi sobie wyobrazić niektóre rzeczy, zatem mam pytanie do was do czego tam naprawde przydatna jest biblioteka STL? Chciałbym jakieś konkretne przykłady bym mógł sobie to wyobrazić, najlepiej jakieś zadania do rozwiązania czy coś tego typu.
Kurs STL na cpp0x oczywiście przeglądałem. Pozdrawiam. |
|
j23 |
» 2016-03-21 10:43:44 W skrócie: string, kontenery, przydatne funkcje (np. sort), strumienie, inteligentne wskaźniki, obiekty funkcyjne. |
|
mateczek |
» 2016-03-21 10:49:17 Biblioteka to podstawa !!!
// na początek strumienie są częścią STL cout<<"";
//kontenery //vectror stack, list, map, itp. idt>
//napisy string napis="abcd";
//algorytmy np. sort();
//inteligentne wskaźniki
Ja pisząc w QT, nie często używam STL. Ponieważ znaczną część tej biblioteki jest w jakiś sposób zdublowana przez QT. Zamiast vector używam QVector itd, itp
|
|
Monika90 |
» 2016-03-21 10:57:33 Biblioteka STL to biblioteka algorytmów, głównie operujących na ciągach, np. sortowanie, wyszukiwanie w ciągach, porównywanie ciągów, usuwanie z ciągów, permutacje, tasowanie itp. Do tego jest kilka kontenerów po to żebyś miał w czym te ciągi trzymać.
Strumienie i inteligentne wskaźniki nigdy nie były częścią STL, także std::string nie wywodzi się z STL. |
|
carlosmay |
» 2016-03-21 17:20:19 Chciałbym jakieś konkretne przykłady bym mógł sobie to wyobrazić | wykrywanie duplikatów - czytaj ostatni post użytkownika @mokrowski. Taki prawie podręcznikowy przykład stosu dla dowolnego typu (jest prostszy w implementacji niż wskaźniki z new i pewnie szybszy, co jest głównym założeniem STL). #include <iostream> #include <deque> #include <exception>
template < class T > class Stack { protected: std::deque < T > c; public: class ReadEmptyStack : public std::exception { virtual const char * what() const throw() { return "you try to read empty stack"; } }; typename std::deque < T >::size_type size() const { return c.size(); } bool empty() const { return c.empty(); } void push( const T & elem ) { c.push_back( elem ); } T pop() { if( c.empty() ) { throw ReadEmptyStack(); } T elem( c.back() ); c.pop_back(); return elem; } T & top() { if( c.empty() ) { throw ReadEmptyStack(); } return c.back(); } };
int main() { try { Stack < int > st; st.push( 1 ); st.push( 2 ); st.push( 3 ); std::cout << st.pop() << " "; std::cout << st.pop() << " "; st.top() = 77; st.push( 4 ); st.push( 5 ); st.pop(); std::cout << st.pop() << " "; std::cout << st.pop() << std::endl; std::cout << st.pop() << std::endl; } catch( const std::exception & e ) { std::cerr << e.what() << std::endl; } } |
|
DejaVu |
» 2016-03-21 17:23:13 Już lepiej użyć std::stack aniżeli tworzyć coś takiego :) |
|
carlosmay |
» 2016-03-21 17:47:45 T pop() { T elem( c.back() ); c.pop_back(); return elem; } Tak jest opakowane, bo chciałem żeby jedna metoda obsłużyła odczytanie zdejmowanego elementu ze stosu, czego nie ma klasa stack<>. Wiem, że można wywołać metody top() i pop() osobno, ale tak może być wygodniej. |
|
Elaine |
» 2016-03-21 21:34:09 I niepoprawnie: std::stack::pop zwraca void, bo zwracając T nie da się (C++11 pomaga, ale nie rozwiązuje problemu) zagwarantować, że pop albo się powiedzie, albo rzuci wyjątek i nie zmieni stanu stosu. |
|
« 1 » 2 |