Widok ciągu jest klasą własnej biblioteki, która powinna być zawarta w programie C ++ w następujący sposób:
#włączać
Ma funkcje członków, które zostały skategoryzowane w następujących nagłówkach: konstrukcja, pojemność, dostęp do elementów, obsługa iteratora, modyfikatory, operacje ciągów i wyszukiwanie. Dziwnie, String_View ma modyfikatory, które są sprzeczne z jego definicją. To jest wyjaśnione poniżej w tym samouczku. Cały kod widoku ciągu w tym samouczku znajduje się w funkcji C ++ Main ().
Treść artykułu
Budowa
basic_string_view (const wykres* str)
To konstruuje widok łańcucha z całego string. Poniżej ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
const char* str = "jeden dwa trzy cztery pięć";
string_view Strv (str);
Cout <powrót 0;
Wyjście to:
jeden dwa trzy cztery pięć
Zwróć uwagę, że String_View, zamiast Basic_String_View, został użyty dla nazwy konstruktora.
basic_string_view (const wykres* str, size_type len)
Ta funkcja członka oknie pierwsze znaki LEN argumentu stringowego. Okno nie kopiuje. Brak kopii konstruktora string-view. Po prostu odwołują się. Poniższy program pokazuje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
const char* str = "jeden dwa trzy cztery pięć";
String_View Strv (Str, 13);
Cout <powrót 0;
Wyjście to:
raz Dwa Trzy
basic_string_view (const basic_string_view &)
Ten konstruktor jest taki sam jak pierwszy konstruktor powyżej, ale jego argumentem jest obiekt String_View, który już miał swój widok. Poniższy program ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
const char* str = "jeden dwa trzy cztery pięć";
String_View Strv (Str, 13);
String_View Strvv (Strv);
Cout <powrót 0;
Wyjście to:
raz Dwa Trzy
basic_string_view & operator = (const basic_string_view &)
Ten konstruktor członka jest podobny do powyższego, ale String_View jest przypisany i nie jest przekazywany jako argument. Poniższy program ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
const char* str = "jeden dwa trzy cztery pięć";
String_View Strv (Str, 13);
string_view strvv = strv;
Cout <powrót 0;
Wyjście to:
raz Dwa Trzy
Pojemność
size_type size () const
Pamiętaj, że String_View to zakres od oryginalnego ciągu. To nie jest kopia zakresu. Ma odniesienia do elementów znaków zakresu w oryginalnym ciągu. Rozmiar tego String_View (Window View) może być nadal określony, ponieważ String_View to obiekt utworzony z klasy String_View. Rozmiar jest zwracany przez funkcję elementu rozmiar (). Poniższy program pokazuje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
const char* str = "jeden dwa trzy cztery pięć";
String_View Strv (Str, 13);
int sz = strv.rozmiar();
Cout <powrót 0;
Wyjście to:
13
bool pusty () const
Obiekt String_View może zostać utworzony pusty, jak pokazano w następującym programie. Gdy pusta funkcja członka pustego () zwróci true; W przeciwnym razie zwróci fałsz. Program to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
string_view strv;
Bool Bl = Strv.pusty();
Cout <powrót 0;
Dane wyjściowe to 1, dla prawda. Zauważ, że obiekt String_View został utworzony bez nawiasów i bez argumentu.
Dostęp do elementu
const_reference operator [] (size_type POS) const
Do odczytania wartości (znaku) w String_View można użyć operatora wsporników kwadratowych. Poniższy program wykorzystuje pętlę, aby to zilustrować:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
const char* str = "jeden dwa trzy cztery pięć";
String_View Strv (Str, 13);
dla (int i = 0; iCout < Cout < powrót 0;
Wyjście to:
raz Dwa Trzy
UWAGA: Postacie w obiekcie String_View nie można zmienić. Każda możliwa zmiana należy dokonać w oryginalnym ciągu.
Obsługa iteratora
const_iterator start () const
Ta funkcja członka zwraca stały iterator, który wskazuje na pierwszy element znaku obiektu String_View. Tutaj const_iterator oznacza, że postać nie można zmienić. Iterator można jednak zwiększyć, aby wskazać następny element znaku; lub dodaj liczbę całkowitą podobną do dodania liczby całkowitej do indeksu, aby wskazać inny element postaci. Poniższy program ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
const char* str = "jeden dwa trzy cztery pięć";
String_View Strv (Str, 13);
string_view :: const_iterator it = strv.zaczynać();
it ++;
it = it + 4;
Cout <<*it <powrót 0;
Wyjście to „w”. Zauważ, że iterator został zbudowany.
const_iterator end () const
Ta funkcja członka zwraca stały iterator, który wskazuje tuż po ostatnim elemencie znaku obiektu String_View. Iterator można zmniejszyć, aby wskazać ostatni element znaku lub odejmować liczbę całkowitą, podobnie do odejmowania liczby całkowitej od indeksu, aby wskazać inny element znaków. Tutaj const_iterator oznacza, że postać nie można zmienić. Poniższy program ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
const char* str = "jeden dwa trzy cztery pięć";
String_View Strv (Str, 13);
string_view :: const_iterator it = strv.koniec();
To--;
it = it - 4;
Cout <<*it <powrót 0;
Wyjście to „t”.
Modyfikatory
void remove_prefix (size_type n)
To usuwa pierwsze podniszczenie z String_View, ale nie usuwa żadnego znaku z oryginalnego ciągu. Poniższy program ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
const char* str = "jeden dwa trzy cztery pięć";
String_View Strv (Str, 13);
Cout <Strv.usuń_prefix (4);
Cout <Cout < powrót 0;
Wyjście to:
raz Dwa Trzy
dwa trzy
jeden dwa trzy cztery pięć
void remove_suffix (size_type n)
To usuwa ostatnie podstęp z String_View, ale nie usuwa żadnego znaku z oryginalnego ciągu. Poniższy program ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
const char* str = "jeden dwa trzy cztery pięć";
String_View Strv (Str, 13);
Cout <Strv.remove_suffix (6);
Cout <Cout < powrót 0;
Wyjście to:
raz Dwa Trzy
jeden dwa
jeden dwa trzy cztery pięć
Operacje ciągów
Kopia size_typ (wykres* s, size_type n, size_type pos = 0) const
Ta funkcja kopiuje zakres znaków z obiektu String_View (nie oryginalny ciąg), aby zastąpić pierwsze podtrepanie innego ciągu. Poniższy program ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
char st [] = "aaa bbb ccc ddd eee";
const char* str = "jeden dwa trzy cztery pięć";
String_View Strv (Str, 13);
Cout <Strv.kopia (STRB, 3, 4);
Cout <Cout < powrót 0;
Wyjście to:
raz Dwa Trzy
dwa BBB CCC DDD EEE
jeden dwa trzy cztery pięć
Są tutaj dwa niezależne struny. String_View nie jest niezależnym ciągiem. Jest to okno zasięgu jednego z niezależnych ciągów. Zauważ, że pierwszy parametr funkcji członka, „wykres* s” oznacza tablicę szyjów, a nie const-char* .
int Porównaj (basic_string_view s) const
Liczba znaków dwóch String_Views jest porównywana tutaj. Jeśli jeden, stosując funkcję członka Porównaj (), jest wyższa, wówczas zwraca liczbę dodatnią. Jeśli liczby są równe, zero jest zwracane. Jeśli obiekt String_View, który wykorzystuje funkcję członka, ma niższą liczbę, zwrócono liczbę ujemną. Poniższy program ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
const char* stra = „jeden dwa trzy cztery pięć”;
String_View Strva (Stra, 13);
Cout <const char* strb = "aaa bbb ccc ddd eee";
String_View Strvb (STRB, 11);
Cout <int ret = strvb.Porównaj (strva);
Cout <powrót 0;
Wyjście to:
raz Dwa Trzy
AAA BBB CCC
-14, na komputerze autora.
Badawczy
size_type Find (const wykres* s, size_type pos = 0) const
Ta funkcja członka szuka wystąpienia pierwszego substring. Zwraca wskaźnik pierwszego znaku znalezionego podstępu. Jeśli nie znaleziono, zwraca -1. Drugi argument mówi, gdzie zaczyna się wyszukiwanie (domyślny indeks to 0). Poniższy program ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
const char* str = "jeden dwa trzy cztery pięć";
String_View Strv (Str, 13);
Cout <const char* cs = "dwa";
int ret = strv.znaleźć (CS, 0);
Cout <powrót 0;
Wyjście to:
raz Dwa Trzy
4
Wniosek
String_view to widok okna zakresu oryginalnego ciągu. To nie jest kopia znaków. Postacie są określane. Istnieje klasa widoku ciągu, z której instancje są instancje. String-View ma wiele funkcji członka. Podstawowe funkcje członków z różnych kategorii zostały wyjaśnione powyżej.