Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
opis_kontenera:string [2008/12/07 17:45] mstefanc |
opis_kontenera:string [2008/12/11 20:48] mstefanc |
||
---|---|---|---|
Linia 18: | Linia 18: | ||
|[[string#operator=|operator=]] | Operator przypisania | | |[[string#operator=|operator=]] | Operator przypisania | | ||
^ Iteratory ^^ | ^ Iteratory ^^ | ||
- | |begin |Zwraca iterator na pierwszy znak napisu | | + | |<code cpp> iterator begin(); |
- | |end |Zwraca iterator wskazujący na miejsce za ostatnim znakiem | | + | const_iterator begin() const;</code>|Zwraca iterator na pierwszy znak napisu | |
- | |rbegin |Zwraca wsteczny iterator wskazujący na ostatni znak napisu | | + | |<code cpp> iterator end(); |
- | |rend |Zwraca wsteczny iterator wskazujący na miejsce przed pierwszym znakiem | | + | const_iterator end() const;</code>|Zwraca iterator wskazujący na miejsce za ostatnim znakiem | |
+ | |<code cpp> reverse_iterator rbegin(); | ||
+ | const_reverse_iterator rbegin() const;</code>|Zwraca wsteczny iterator wskazujący na ostatni znak napisu | | ||
+ | |<code cpp> reverse_iterator rend(); | ||
+ | const_reverse_iterator rend() const;</code>|Zwraca wsteczny iterator wskazujący na miejsce przed pierwszym znakiem | | ||
^Rozmiar^^ | ^Rozmiar^^ | ||
- | |size |Zwraca ilość znaków w napisie | | + | |<code cpp>size_t size() const;</code>|Zwraca ilość znaków w napisie (to samo co length())| |
- | |length |Zwraca ilość znaków w napisie | | + | |<code cpp>size_t length() const;</code>|Zwraca ilość znaków w napisie (to samo co size())| |
- | |max_size |Zwraca maksymalny dozwolony rozmiar napisu | | + | |<code cpp>size_t max_size ( ) const;</code>|Zwraca maksymalny dozwolony rozmiar napisu | |
- | |resize |Zmienia rozmiar napisu (skraca lub wydłuża) | | + | |<code cpp>void resize ( size_t n, char c ); |
- | |capacity |Zwraca wielkość aktualnie zarezerwowanej dla napisu pamięci | | + | void resize ( size_t n );</code>|Zmienia rozmiar napisu (skraca lub wydłuża). \\ Jeśli podany będzie dodatkowy argument //c//, po wydłużeniu napisu wolne miejsca zostaną wypełnione podanym znakiem. | |
- | |reserve |Wymusza zarezerwowanie ustalonej pamięci dla napisu | | + | |<code cpp>size_t capacity ( ) const;</code>|Zwraca wielkość aktualnie zarezerwowanej dla napisu pamięci. //capacity >= size//. W razie potrzeby dodatkowa pamięć jest alokowana automatycznie. | |
- | |clear |Czyści napis | | + | |<code cpp>void reserve ( size_t res_arg=0 );</code>|Wymusza zarezerwowanie ustalonej pamięci dla napisu. Jeśli podany argument jest mniejszy od aktualnej długości napisu, ilość pamięci jest zmniejszana do wielkości gwarantującej przechowanie dotychczasowego napisu. | |
- | |empty |Sprawdza, czy napis jest pusty | | + | |<code cpp>void clear();</code>|Czyści napis | |
+ | |<code cpp>bool empty ( ) const;</code>|Sprawdza, czy napis jest pusty | | ||
^Dostęp do znaków^^ | ^Dostęp do znaków^^ | ||
- | |operator[] |Zwraca znak na danej pozycji | | + | |<code cpp>const char& operator[] ( size_t pos ) const; |
- | |at |Zwraca znak na danej pozycji | | + | char& operator[] ( size_t pos );</code>|Zwraca znak na pozycji //pos//. | |
+ | |<code cpp>const char& at ( size_t pos ) const; | ||
+ | char& at ( size_t pos );</code>|Zwraca znak na pozycji //pos//. Działa podobnie do operatora [], z tym że funkcja at() wykonuje sprawdzenie zakresu i w wypadku jego przekroczenia rzuca wyjątek //out_of_range//.| | ||
^Modyfikacja^^ | ^Modyfikacja^^ | ||
|operator+= |Dopisuje znaki na końcu napisu | | |operator+= |Dopisuje znaki na końcu napisu | | ||
- | |append |Dopisuje znaków na końcu napisu | | + | |append |Dopisuje znaki na końcu napisu | |
|push_back |Dodaje znak na koniec napisu | | |push_back |Dodaje znak na koniec napisu | | ||
|assign |Zastępuje dotychczasowy napis nowym | | |assign |Zastępuje dotychczasowy napis nowym | | ||
Linia 57: | Linia 64: | ||
|compare |Porównuje dwa stringi | | |compare |Porównuje dwa stringi | | ||
- | ===== Podstawowe ===== | + | ===== Konstruktory ===== |
- | + | ||
- | === Konstruktory === | + | |
Istnieje kilka metod tworzenia obiektów klasy string. | Istnieje kilka metod tworzenia obiektów klasy string. | ||
Linia 94: | Linia 99: | ||
W przeciwnym wypadku argumenty są traktowane jak iteratory i napis jest tworzony przez skopiowanie do stringa wszystkich elementów poczynając od //begin// a kończąc na elemencie poprzedzającym //end//. | W przeciwnym wypadku argumenty są traktowane jak iteratory i napis jest tworzony przez skopiowanie do stringa wszystkich elementów poczynając od //begin// a kończąc na elemencie poprzedzającym //end//. | ||
- | === operator= === | + | ===== Przypisanie ===== |
<code cpp>string& operator= ( const string& str ); | <code cpp>string& operator= ( const string& str ); | ||
Linia 105: | Linia 110: | ||
* //c// - po przypisaniu zawartość napisu stanowi pojedynczy znak | * //c// - po przypisaniu zawartość napisu stanowi pojedynczy znak | ||
- | ===== Iteratory ===== | + | W każdym przypadku zwracaną wartością jest //*this//. |
- | ===== Rozmiar ===== | + | ===== Modyfikacja ===== |
- | ===== Dostęp do znaków ===== | + | === operator += === |
+ | <code cpp>string& operator+= ( const string& str ); | ||
+ | string& operator+= ( const char* s ); | ||
+ | string& operator+= ( char c );</code> | ||
- | ===== Modyfikacja ===== | + | Dopisuje na końcu napisu kopię danych podaną jako argument. |
+ | |||
+ | Rozszerzoną funkcjonalność oferuje funkcja append. | ||
+ | |||
+ | === append === | ||
+ | |||
+ | <code cpp>string& append ( const string& str );</code> | ||
+ | |||
+ | Dopisuje na końcu napisu kopię podanego argumentu. | ||
+ | |||
+ | <code cpp>string& append ( const string& str, size_t pos, size_t n );</code> | ||
+ | Dopisuje na końcu podciąg podanego argumentu zaczynający się na pozycji //pos// i składający się z //n// znaków (bądź mniej, jeśli napis się skończy wcześniej). Jeśli //pos// jest większy niż długość napisu zgłaszany jest wyjątek //out_of_range// | ||
+ | |||
+ | <code cpp>string& append ( const char * s, size_t n );</code> | ||
+ | Dopisuje na końcu pierwsze //n// znaków z tablicy wskazywanej przez //s//. | ||
+ | |||
+ | <code cpp>string& append ( const char * s );</code> | ||
+ | |||
+ | Dopisuje na końcu napis wskazywany przez s, kończący się znakiem '\0'. | ||
+ | |||
+ | <code cpp>string& append ( size_t n, char c );</code> | ||
+ | |||
+ | Dopisuje na końcu //n// razy znak //c//. | ||
+ | |||
+ | <code cpp>template<class InputIterator> string& append (InputIterator first, InputIterator last);</code> | ||
+ | |||
+ | Dopisuje na końcu wszystie znaki zaczynając od wskazywanego przez //first// a kończąc na znaku poprzedzającym //last//. | ||
+ | |||
+ | === assign === | ||
+ | |||
+ | <code cpp>string& assign ( const string& str ); | ||
+ | string& assign ( const string& str, size_t pos, size_t n ); | ||
+ | string& assign ( const char* s, size_t n ); | ||
+ | string& assign ( const char* s ); | ||
+ | string& assign ( size_t n, char c ); | ||
+ | template <class InputIterator> | ||
+ | string& assign ( InputIterator first, InputIterator last );</code> | ||
+ | |||
+ | Działanie assign polega na przypisaniu do napisu zawartości podanej jako argument. Argumenty interpretowane są identycznie jak w funkcji append. | ||
+ | |||
+ | === insert === | ||
+ | |||
+ | <code cpp>string& insert ( size_t pos1, const string& str ); | ||
+ | Wstawia cały napis //str// na pozycji //pos1//. | ||
+ | |||
+ | <code cpp>string& insert ( size_t pos1, const string& str, size_t pos2, size_t n );</code> | ||
+ | Wstawia do napisu na pozycji //pos1// podciąg napisu //str// zaczynający się na pozycji //pos2// i zawierający do //n// znaków. | ||
+ | |||
+ | <code cpp>string& insert ( size_t pos1, const char * s, size_t n );</code> | ||
+ | Wstawia na pozycji //pos1// pierwsze //n// znaków z tablicy //s//. | ||
+ | |||
+ | <code cpp>string& insert ( size_t pos1, const char * s );</code> | ||
+ | Wstawia na pozycji //pos1// cały napis wskazywany przez //s// (napis musi być zakończony znakiem '\0'). | ||
+ | |||
+ | <code cpp>string& insert ( size_t pos1, size_t n, char c );</code> | ||
+ | Wstawia na pozycji //pos1// //n// znaków //c//. | ||
+ | |||
+ | <code cpp>iterator insert ( iterator p, char c );</code> | ||
+ | Wstawia na pozycji wskazywanej przez iterator //p// znak //c//. Zwracany jest iterator na wstawiony znak. | ||
+ | |||
+ | <code cpp>void insert ( iterator p, size_t n, char c );</code> | ||
+ | Wstawia na pozycji wskazywanej przez iterator //p// //n// znaków //c//. | ||
+ | |||
+ | <code cpp>template<class InputIterator> void insert (iterator p, InputIterator first, InputIterator last);</code> | ||
+ | Wstawia na pozycji wskazywanej przez iterator //p// wszystkie znaki zaczynając od wskazywanego przez //first//, kończąc na znaku poprzedzającym //last//. | ||
===== Operacje dodatkowe ===== | ===== Operacje dodatkowe ===== | ||
+ | ===== Porównanie operacji na napisach w C i C++ ===== | ||
+ | |||
+ | ^ operacja ^ C ^ C++ ^ | ||
+ | | Porównanie zawartości | strcmp(s1, s2) | s1 == s2 (!=, <, > etc) / s1.compare(s2, ...) | | ||
+ | | Dopisanie na koniec | strcat(s1, "...") | s1 += "..." / s1.append("...", ...) | | ||
+ | | Kopiowanie zawartości | strcpy(s1, s2) | s1 = s2 / s1.assign(s2) | | ||
+ | | Długość | strlen(s1) | s1.size() | | ||
+ | | Wyszukiwanie napisu | strstr(s1, "napis") | s1.find("napis")| | ||
+ | | Wyszukiwanie jednego ze znaków | strspn(s1, "abc") | s1.find_first_of("abc") | | ||
+ | | Podział na podnapisy | strtok(s1, " ") | brak | |