Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] STL

Ostatnio zmodyfikowano 2016-03-22 20:39
Autor Wiadomość
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.
P-146327
j23
» 2016-03-21 10:43:44
W skrócie: string, kontenery, przydatne funkcje (np. sort), strumienie, inteligentne wskaźniki, obiekty funkcyjne.
P-146329
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


P-146330
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.
P-146331
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).
C/C++
#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;
    }
}
P-146337
DejaVu
» 2016-03-21 17:23:13
Już lepiej użyć std::stack aniżeli tworzyć coś takiego :)
P-146338
carlosmay
» 2016-03-21 17:47:45
C/C++
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.
P-146343
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.
P-146393
« 1 » 2
  Strona 1 z 2 Następna strona