W C++ Vector jest jednowymiarową strukturą danych, która dynamicznie zwiększa się w zależności od wymagań. W tej strukturze danych można efektywnie organizować dane (wstawianie/modyfikacja/usuwanie). Jego zastosowania obejmują:
- Reprezentowanie wektorów matematycznych w zastosowaniach naukowych i inżynieryjnych
- Za pomocą tej struktury danych można implementować kolejki, stosy itp.
Większość typowych operacji i funkcji CRUD związanych z tą strukturą danych została szczegółowo omówiona w oparciu o scenariusze za pomocą fragmentów składni i kodu.
Temat treści:
- Wstaw element do wektora
- Wstaw wiele elementów do wektora
- Uzyskaj dostęp do elementów z wektora
- Zaktualizuj element w wektorze
- Usuń określony element z wektora
- Usuń wszystkie elementy z wektora
- Związek wektorów
- Przecięcie wektorów
- Sprawdź, czy wektor jest pusty, czy nie
- Przemierzaj wektor za pomocą Const_Iterator
- Przemierzaj wektor za pomocą Reverse_Iterator
- Wciśnij elementy do wektora
- Pop elementy z wektora
- Zamień wektory
- Pobierz pierwszy element z wektora
- Pobierz ostatni element z wektora
- Przypisz nowe wartości do wektora
- Rozszerz wektor za pomocą Emplace()
- Rozszerz wektor za pomocą Emplace_Back()
- Maksymalny element wektora
- Minimalny element wektora
- Suma elementów w wektorze
- Mnożenie elementarne dwóch wektorów
- Iloczyn skalarny dwóch wektorów
- Konwertuj zbiór na wektor
- Usuń zduplikowane elementy
- Konwertuj wektor na zbiór
- Usuń puste ciągi
- Zapisz wektor do pliku tekstowego
- Utwórz wektor z pliku tekstowego
Wstaw element do wektora
The std::vector::insert() funkcja w C++ STL służy do wstawiania elementów w określonej pozycji.
Składnia:
wektor. wstawić ( pozycja, element ) ;Skorzystajmy z tej funkcji i przekażmy pierwszą pozycję jako parametr określający pozycję, w której element ma zostać wstawiony, i podaj element jako drugi parametr.
Można tu zastosować funkcję Begin() w celu zwrócenia iteratora wskazującego pierwszy element wektora wejściowego. Dodanie pozycji do tej funkcji powoduje wstawienie elementu w tej pozycji.
Utwórzmy wektor „student_names” typu string i wstawmy dwa ciągi znaków na pierwszej i drugiej pozycji, jeden po drugim, za pomocą funkcji wstaw().
#includeza pomocą przestrzeń nazw st ;
główny ( )
{
// Inicjowanie wektora - imiona_studentów
wektor < strunowy > imiona_uczniów ;
cout << „Istniejący wektor: \N ' ;
Do ( automatyczny I : imiona_uczniów ) cout << I << koniec ;
// Wstaw „Sravan Kumar” na pierwszej pozycji
imiona_uczniów. wstawić ( imiona_uczniów. zaczynać ( ) + 0 , „Shravan Kumar” ) ;
// Wstaw „Sravan Kumar” na drugiej pozycji
imiona_uczniów. wstawić ( imiona_uczniów. zaczynać ( ) + 1 , „Lalita” ) ;
cout << „Ostateczny wektor: \N ' ;
Do ( automatyczny J : imiona_uczniów ) cout << J << koniec ;
}
Wyjście:
Poprzednio wektor „nazwy_studentów” był pusty. Po wstawieniu wektor zawiera dwa elementy.
Wstaw wiele elementów do wektora
W tym scenariuszu używamy tej samej funkcji, która jest std::vector::insert(). Musimy jednak przekazać dodatkowe/różne parametry tej samej funkcji, aby wstawić wiele elementów do wektora.
Scenariusz 1: Wielokrotne wstawianie pojedynczego elementu
W tym scenariuszu dodajemy ten sam element wielokrotnie.
Składnia:
wektor. wstawić ( pozycja, rozmiar, element ) ;Aby to zrobić, musimy przekazać rozmiar jako drugi parametr do funkcji wstaw(). Łączna liczba parametrów przekazywanych do tej funkcji wynosi trzy.
Tutaj:
- Parametr position określa położenie elementu, który ma zostać wstawiony. Jeśli rozmiar jest większy niż 1, indeksem pozycji początkowej będzie pozycja.
- Parametr size określa, ile razy element ma zostać wstawiony.
- Parametr element przyjmuje element, który ma zostać wstawiony do wektora.
Rozważmy wektor „nazwiska_studentów” z dwoma ciągami znaków. Włóż struny „Lavanya” pięć razy na drugą pozycję.
#includeza pomocą przestrzeń nazw st ;
główny ( )
{
// Inicjowanie wektora - imiona_studentów
wektor < strunowy > imiona_uczniów { „Shravan Kumar” , „Lalita” } ;
cout << „Istniejący wektor: \N ' ;
Do ( automatyczny I : imiona_uczniów ) cout << I << koniec ;
// Wstaw „Lavanya” na drugiej pozycji 5 razy
imiona_uczniów. wstawić ( imiona_uczniów. zaczynać ( ) + 1 , 5 , „Lawana” ) ;
cout << ' \N Ostateczny wektor: \N ' ;
Do ( automatyczny J : imiona_uczniów ) cout << J << koniec ;
}
Wyjście:
W istniejącym wektorze „Sravan Kumar” znajduje się na pierwszej pozycji, a „Lalitha” na drugiej pozycji. Po pięciokrotnym wstawieniu „Lavanyi” (z pozycji drugiej na szóstą) „Lalitha” przesunęła się na pozycję siódmą (ostatnią).
Scenariusz 2: Wstawianie wielu elementów
W tym scenariuszu dodajemy jednocześnie różne elementy z innego wektora. Tutaj również używamy tej samej funkcji, ale składnia i parametry ulegną zmianie.
Składnia:
wektor. wstawić ( pozycja, pierwszy_iterator, drugi_iterator ) ;Aby to zrobić, musimy przekazać rozmiar jako drugi parametr do funkcji wstaw(). Łączna liczba parametrów przekazywanych do tej funkcji wynosi trzy.
Tutaj:
- Parametr position określa położenie elementu, który ma zostać wstawiony.
- „first_iterator” określa pozycję początkową, od której mają zostać wstawione elementy (w zasadzie za pomocą funkcji Begin() zwracany jest iterator wskazujący pierwszy element znajdujący się w kontenerze).
- Parametr „drugi_iterator” określa końcową pozycję, do której elementy mają zostać wstawione (w zasadzie za pomocą funkcji end() zwracany jest iterator wskazujący obok ostatniego punktu znajdującego się w kontenerze).
Utwórz dwa wektory „marks1” i „marks2” typu całkowitego. Wstaw wszystkie elementy występujące w wektorze „marks2” na pierwszą pozycję wektora „marks1”.
#includeza pomocą przestrzeń nazw st ;
główny ( )
{
// Inicjowanie wektora - marks1
wektor < wew > znaki1 { 100 , 89 , 90 , 78 , 98 } ;
cout << „Pierwszy wektor: \N ' ;
Do ( automatyczny I : znaki1 ) cout << I << koniec ;
// Inicjowanie wektora - marks2
wektor < wew > znaki2 { 56 , Cztery pięć , 65 } ;
cout << „Drugi wektor: \N ' ;
Do ( automatyczny J : znaki2 ) cout << J << koniec ;
znaki1. wstawić ( zaczynać ( znaki1 ) , zaczynać ( znaki2 ) , koniec ( znaki2 ) ) ;
// Ostateczny wektor
cout << „Wektor pierwszego-finału: \N ' ;
Do ( automatyczny X : znaki1 )
cout << X << ' ' ;
}
Wyjście:
Pierwszy wektor (marks1) zawiera pięć elementów, a drugi wektor (marks2) zawiera trzy elementy. Przekazaliśmy parametry Begin (marks1), Begin(marks2), end(marks2) do funkcji „insert” w taki sposób, że wszystkie elementy obecne w drugim wektorze są iterowane i wstawiane na początku do pierwszego wektora. Zatem pierwszy wektor zawiera osiem elementów.
Uzyskaj dostęp do elementów z wektora
1. Korzystanie z operatora []
W niektórych scenariuszach może być wymagane zwrócenie tylko określonych elementów z wektora. Zwracanie wszystkich elementów nie jest potrzebne. Aby więc zwrócić tylko określone elementy oparte na indeksie, używany jest operator indeksu i funkcje at().
Składnia:
wektor [ pozycja_indeksu ]W C++ indeksowanie zaczyna się od 0 dla dowolnej struktury danych. Jeśli element nie istnieje, zwraca wartość pustą (nie pojawia się żaden błąd ani ostrzeżenie).
Rozważmy wektor „produktów” z pięcioma elementami. Uzyskaj dostęp do wszystkich elementów jeden po drugim, korzystając z pozycji indeksu.
#includeza pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - produkty z 5 ciągami
wektor < strunowy > produkty { 'mydło' , 'szampon' , 'olej' , 'owoce' , 'warzywa' } ;
//Dostęp do elementów produktów
cout << „Pierwszy element:” << produkty [ 0 ] << koniec ;
cout << „Drugi element:” << produkty [ 1 ] << koniec ;
cout << „Trzeci element:” << produkty [ 2 ] << koniec ;
cout << „Czwarty element:” << produkty [ 3 ] << koniec ;
cout << „Piąty element:” << produkty [ 4 ] << koniec ;
// Spróbuj uzyskać dostęp do dziewiątego elementu
cout << „Dziewiąty element:” << produkty [ 8 ] << koniec ;
}
Wyjście:
W indeksie 8 nie ma żadnego elementu. Zwracana jest zatem wartość pusta.
2. Korzystanie z funkcji At().
At() jest funkcją członkowską, która jest podobna do poprzedniego przypadku użycia, ale zwraca wyjątek „std::out_of_range”, gdy podano jej indeks spoza zakresu.
Składnia:
wektor. Na ( pozycja_indeksu )Musimy przekazać pozycję indeksu do tej funkcji.
Rozważmy wektor „produktów” z pięcioma elementami. Uzyskaj dostęp do wszystkich elementów jeden po drugim, korzystając z pozycji indeksu i spróbuj uzyskać dostęp do elementu znajdującego się na 9. pozycji.
#includeza pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - produkty z 5 ciągami
wektor < strunowy > produkty { 'mydło' , 'szampon' , 'olej' , 'owoce' , 'warzywa' } ;
//Dostęp do elementów produktów
cout << „Pierwszy element:” << produkty. Na ( 0 ) << koniec ;
cout << „Drugi element:” << produkty. Na ( 1 ) << koniec ;
cout << „Trzeci element:” << produkty. Na ( 2 ) << koniec ;
cout << „Czwarty element:” << produkty. Na ( 3 ) << koniec ;
cout << „Piąty element:” << produkty. Na ( 4 ) << koniec ;
//Dostęp do elementów, których nie ma w wektorze
cout << „Dziewiąty element:” << produkty. Na ( 8 ) << koniec ;
}
Wyjście:
Występuje błąd podczas dostępu do 9. elementu:
zakończyć wywoływane po rzuceniu instancji „std::out_of_range”Co ( ) : wektor :: _M_zakres_check : __N ( który jest 8 ) >= Ten - > rozmiar ( ) ( który jest 5 )
Zaktualizuj element w wektorze
1. Korzystanie z operatora []
Korzystając z pozycji indeksu, możemy zaktualizować element w wektorze. Operator [] przyjmuje pozycję indeksu elementu, który ma zostać zaktualizowany. Nowy element zostanie przypisany do tego operatora.
Składnia:
Wektor [ pozycja_indeksu ] = ElementRozważ wektor „student_marks” z pięcioma wartościami. Zaktualizuj elementy obecne w indeksach 1 i 3.
#include#uwzględnij
za pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - student_marks
wektor < wew > oceny_uczniów { 98 , 78 , 90 , 67 , 89 } ;
cout << „Istniejące znaki:” << koniec ;
Do ( wew itr : oceny_uczniów )
cout << itr << koniec ;
// Zaktualizuj element o indeksie-3 wartością 100
oceny_uczniów [ 3 ] = 100 ;
// Zaktualizuj element o indeksie-1 wartością 60
oceny_uczniów [ 1 ] = 60 ;
cout << „Oceny końcowe:” << koniec ;
Do ( wew itr : oceny_uczniów )
cout << itr << koniec ;
}
Wyjście:
Widzimy, że końcowy wektor przechowuje elementy aktualizacji w indeksach 1 i 3.
2. Korzystanie z funkcji At().
Podobnie jak operator indeksu, at() jest w zasadzie funkcją członkowską, która aktualizuje wartość na podstawie indeksu w iteratorze. Jeśli indeks określony w tej funkcji nie istnieje, zgłaszany jest wyjątek „std::out_of_range”.
wektor. Na ( pozycja_indeksu ) = ElementRozważmy wektor „produktów” z pięcioma elementami. Zaktualizuj wszystkie elementy obecne w wektorze innymi elementami.
#includeza pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - produkty z 5 ciągami
wektor < strunowy > produkty { 'mydło' , 'szampon' , 'olej' , 'owoce' , 'warzywa' } ;
cout << 'Istniejące produkty: ' << koniec ;
Do ( ciąg to : produkty )
cout << itr << koniec ;
//Aktualizacja wszystkich ciągów
produkty. Na ( 0 ) = 'Ciasto' ;
produkty. Na ( 1 ) = 'Czekolada' ;
produkty. Na ( 2 ) = 'Owoce' ;
produkty. Na ( 3 ) = 'Cebule' ;
produkty. Na ( 4 ) = 'Napoje bezalkoholowe' ;
cout << ' \N Produkty końcowe: „ << koniec ;
Do ( ciąg to : produkty )
cout << itr << koniec ;
}
Wyjście:
Usuń określony element z wektora
W C++, std::vector::erase() funkcja służy do usunięcia określonego elementu/zakresu elementów z wektora. Elementy są usuwane na podstawie pozycji iteratora.
Składnia:
wektor. usuwać ( pozycja iteratora )Zobaczmy składnię usuwania określonego elementu z wektora. Możemy użyć funkcji Begin() lub end(), aby uzyskać pozycję elementu obecnego w wektorze, który ma zostać usunięty.
Rozważmy wektor „produktów” z pięcioma elementami.
- Usuń trzeci element, określając iterator Begin(). Begin() wskazuje pierwszy element wektora. Jeśli dodamy do tej funkcji dwa, wskaże ona trzeci element.
- Usuń ostatni element, określając iterator end(). End() wskazuje ostatni element wektora.
za pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - produkty z 5 ciągami
wektor < strunowy > produkty { 'mydło' , 'szampon' , 'olej' , 'owoce' , 'warzywa' } ;
cout << 'Istniejące produkty: ' << koniec ;
Do ( ciąg to : produkty )
cout << itr << koniec ;
// Usuń trzeci element
produkty. usuwać ( produkty. zaczynać ( ) + 2 ) ;
cout << ' \N Po usunięciu trzeciego elementu: \N ' ;
Do ( ciąg to : produkty )
cout << itr << koniec ;
// Usuń ostatni element
produkty. usuwać ( produkty. koniec ( ) ) ;
cout << ' \N Po usunięciu ostatniego elementu: \N ' ;
Do ( ciąg to : produkty )
cout << itr << koniec ;
}
Wyjście:
Teraz w wektorze „produkty” istnieją tylko trzy elementy („mydło”, „szampon”, „owoce”).
Usuń wszystkie elementy z wektora
Scenariusz 1: Usuń zakres elementów z wektora
Użyjmy funkcji std::vector::erase(), aby usunąć wiele elementów z zakresu.
Składnia:
wektor. usuwać ( iterator pierwszy, iterator ostatni )Do określenia zakresu służą dwa iteratory (begin() wskazuje na pierwszy element i end() wskazuje na ostatni element).
Rozważ wektor „produktów” z pięcioma elementami i usuń wszystkie elementy z drugiej pozycji. Aby to osiągnąć, pierwszym iteratorem jest początek (produkty)+1, który wskazuje na drugi element, a drugim iteratorem jest koniec (produkty).
#includeza pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - produkty z 5 ciągami
wektor < strunowy > produkty { 'mydło' , 'szampon' , 'olej' , 'owoce' , 'warzywa' } ;
cout << 'Istniejące produkty: ' << koniec ;
Do ( ciąg to : produkty )
cout << itr << koniec ;
// Usuń wszystkie elementy z drugiej pozycji
produkty. usuwać ( zaczynać ( produkty ) + 1 ,koniec ( produkty ) ) ;
cout << ' \N Produkty końcowe: \N ' ;
Do ( ciąg to : produkty )
cout << itr << koniec ;
}
Wyjście:
Teraz w wektorze „produkty” występuje tylko jeden element („mydło”).
Scenariusz 2: Usuń wszystkie elementy z wektora
Skorzystajmy z std::vector::clear() funkcja usuwająca wszystkie elementy z wektora.
Składnia:
wektor. jasne ( )Do tej funkcji nie są przekazywane żadne parametry.
Rozważmy ten sam wektor, który został wykorzystany w pierwszym scenariuszu i usuń wszystkie elementy za pomocą funkcji clear().
#includeza pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - produkty z 5 ciągami
wektor < strunowy > produkty { 'mydło' , 'szampon' , 'olej' , 'owoce' , 'warzywa' } ;
cout << 'Istniejące produkty: ' << koniec ;
Do ( ciąg to : produkty )
cout << itr << koniec ;
// Usuń wszystkie elementy z produktów
produkty. jasne ( ) ;
cout << ' \N Produkty końcowe: \N ' ;
Do ( ciąg to : produkty )
cout << itr << koniec ;
}
Wyjście:
Widzimy, że w wektorze „produkty” nie ma żadnych elementów.
Związek wektorów
Możliwe jest wykonanie operacji UNION na wektorach za pomocą funkcji std::set_union(). Union zwraca unikalne elementy z wektorów, ignorując zduplikowane elementy. Musimy przekazać oba iteratory do tej funkcji. Oprócz tego należy przekazać iterator wyjściowy, który przechowuje wynik zwracany przez oba iteratory.
Składnia:
set_union ( Najpierw InputIterator1, Najpierw Iterator1, Ostatni 1, Najpierw Iterator2 2, Najpierw Iterator2, Ostatni 2, OutputIterator res ) ;Tutaj:
- „first1” wskazuje na pierwszy element pierwszego iteratora (wektor).
- „Last1” wskazuje na ostatni element pierwszego iteratora (wektor).
- „first2” wskazuje na pierwszy element drugiego iteratora (wektor).
- „Last2” wskazuje na ostatni element drugiego iteratora (wektor).
Utwórz dwa wektory – „przedmioty1” i „podmioty2” – typu integer.
- Posortuj dwa wektory za pomocą funkcji sort(), przekazując iteratory.
- Utwórz wektor wyjściowy (iterator).
- Znajdź sumę tych dwóch wektorów za pomocą funkcji std::set_union(). Użyj metody Begin() jako pierwszego iteratora i end() jako ostatniego iteratora.
- Wykonaj iterację wektora wyjściowego, aby wyświetlić elementy zwracane przez funkcję.
#include
#uwzględnij
za pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - marks1
wektor < wew > znaki1 = { 100 , 90 , 80 , 70 , 60 } ;
// Utwórz wektor - marks2
wektor < wew > znaki2 = { 80 , 90 , 60 , 70 , 100 } ;
// Sortuj oba wektory
sortować ( znaki1. zaczynać ( ) , znaki1. koniec ( ) ) ;
sortować ( znaki2. zaczynać ( ) , znaki2. koniec ( ) ) ;
wektor < wew > wektor wyjściowy ( znaki1. rozmiar ( ) + znaki2. rozmiar ( ) ) ;
wektor < wew > :: iterator Jest ;
I = set_union ( znaki1. zaczynać ( ) , znaki1. koniec ( ) ,
znaki2. zaczynać ( ) ,znaki2. koniec ( ) ,
wektor wyjściowy. zaczynać ( ) ) ;
cout << ' \N znaki1 U znaki2: \N ' ;
Do ( S = wektor wyjściowy. zaczynać ( ) ; S ! = I ; ++ S )
cout << * S << ' ' << ' \N ' ;
}
Wyjście:
W obu wektorach (przedmioty 1 i podmioty 2) znajduje się tylko pięć unikalnych elementów.
Przecięcie wektorów
Znalezienie przecięcia dwóch wektorów jest możliwe przy pomocy funkcji std::set_intersection(). Przecięcie zwraca elementy obecne w obu wektorach.
Składnia:
set_intersection ( Najpierw InputIterator1, Najpierw Iterator1, Ostatni 1, Najpierw Iterator2 2, Najpierw Iterator2, Ostatni 2, OutputIterator res ) ;Parametry przekazywane do funkcji set_union() można również przekazać do tej funkcji set_intersection().
Utwórz dwa wektory – „przedmioty1” i „podmioty2” – typu integer.
- Posortuj dwa wektory za pomocą funkcji sort(), przekazując iteratory.
- Utwórz wektor wyjściowy (iterator).
- Znajdź przecięcie tych dwóch wektorów za pomocą funkcji std::set_intersection(). Użyj metody Begin() jako pierwszego iteratora i end() jako ostatniego iteratora.
- Wykonaj iterację wektora wyjściowego, aby wyświetlić elementy zwracane przez funkcję.
#include
#uwzględnij
za pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - marks1
wektor < wew > znaki1 = { 100 , 10 , 80 , 40 , 60 } ;
// Utwórz wektor - marks2
wektor < wew > znaki2 = { pięćdziesiąt , 90 , 60 , 10 , 100 } ;
// Sortuj oba wektory
sortować ( znaki1. zaczynać ( ) , znaki1. koniec ( ) ) ;
sortować ( znaki2. zaczynać ( ) , znaki2. koniec ( ) ) ;
wektor < wew > wektor wyjściowy ( znaki1. rozmiar ( ) + znaki2. rozmiar ( ) ) ;
wektor < wew > :: iterator Jest ;
I = set_intersection ( znaki1. zaczynać ( ) , znaki1. koniec ( ) ,
znaki2. zaczynać ( ) ,znaki2. koniec ( ) ,
wektor wyjściowy. zaczynać ( ) ) ;
cout << ' \N znaki1 ∩ znaki2: \N ' ;
Do ( S = wektor wyjściowy. zaczynać ( ) ; S ! = I ; ++ S )
cout << * S << ' ' << ' \N ' ;
}
Wyjście:
W obu wektorach (przedmioty 1 i podmioty 2) występują tylko trzy elementy.
Sprawdź, czy wektor jest pusty, czy nie
Przed pracą z wektorami ważne jest sprawdzenie, czy wektor jest pusty, czy nie. Dobrą praktyką w projektach oprogramowania jest również sprawdzanie, czy wektor jest pusty, czy nie, przed wykonaniem operacji, takich jak operacje CRUD itp.
1. Korzystanie z metody Std::vector::empty()
Ta funkcja zwraca 1, jeśli wektor jest pusty (nie zawiera żadnego elementu). W przeciwnym razie zwracane jest 0. Do tej funkcji nie jest przekazywany żaden parametr.
2. Korzystanie z Std::vector::size()
Funkcja std::vector::size() zwraca liczbę całkowitą reprezentującą całkowitą liczbę elementów obecnych w wektorze.
Utwórz dwa wektory – „college1” i „college2”. „College1” zawiera pięć elementów, a „college2” jest puste. Zastosuj obie funkcje do obu wektorów i sprawdź wynik.
#include#include
#uwzględnij
za pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - college1
wektor < strunowy > uczelnia 1 = { „Kolegium-A” , „Kolegium B” , „college-C” , „kolegium-D” , „kolegium-E” } ;
// Utwórz wektor - college2
wektor < strunowy > studia2 ;
// pusty()
cout << uczelnia 1. pusty ( ) << koniec ;
cout << studia2. pusty ( ) << koniec ;
// rozmiar()
cout << uczelnia 1. rozmiar ( ) << koniec ;
cout << studia2. rozmiar ( ) << koniec ;
}
Wyjście:
Funkcja pusty() zwraca 0 dla „college1” i 1 dla „college2”. Funkcja size() zwraca pięć dla „college1” i 0 dla „college2”.
Przemierzaj wektor za pomocą Const_Iterator
Kiedy pracujesz na kontenerach C++, takich jak zestawy, wektory itp., możesz iterować po wszystkich elementach znajdujących się w kontenerze bez ich modyfikowania. The const_iterator jest jednym z iteratorów, które osiągają ten scenariusz. cbegin() (wskazuje pierwszy element wektora) i cend() (wskazuje ostatni element wektora) to dwie funkcje udostępniane przez każdy kontener, które służą do zwracania stałego iteratora na początek i koniec pojemnik. Iterując wektor, możemy wykorzystać te dwie funkcje.
- Stwórzmy wektor o nazwie „działy” z pięcioma ciągami znaków.
- Zadeklaruj const_iterator – ctr typu
. - Iteruj po działach, korzystając z poprzedniego iteratora, używając pętli „for” i wyświetl go.
#uwzględnij
za pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - działy
wektor < strunowy > działy = { 'Obroty' , 'Praca' ,
„HR” , 'TO' , 'Inni' } ;
wektor < strunowy > :: const_iterator kontrolka ;
// Iteruj po działach za pomocą const_iterator - ctr.
Do ( kontrolka = działy. czacznij ( ) ; kontrolka ! = działy. kilka ( ) ; kontrolka ++ ) {
cout << * kontrolka << koniec ;
}
}
Wyjście:
Przemierzaj wektor za pomocą Reverse_Iterator
The odwrotny_iterator jest także iteratorem podobnym do const_iterator, ale zwraca elementy w odwrotnej kolejności. rbegin() (wskazuje ostatni element wektora) i rend() (wskazuje pierwszy element wektora) to dwie funkcje udostępniane przez każdy kontener, które służą do zwracania stałego iteratora na koniec i początek pojemnik.
- Stwórzmy wektor o nazwie „działy” z pięcioma ciągami znaków.
- Zadeklaruj Reverse_iterator – rtr typu
. - Iteruj po działach, korzystając z poprzedniego iteratora, używając pętli „for” i wyświetl go.
#uwzględnij
za pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - działy
wektor < strunowy > działy = { 'Obroty' , 'Praca' ,
„HR” , 'TO' , 'Inni' } ;
wektor < strunowy > :: odwrotny_iterator rtr ;
// Iteruj po działach za pomocą Reverse_iterator - rtr.
Do ( rtr = działy. zacznij ( ) ; rtr ! = działy. sprawia ( ) ; rtr ++ ) {
cout << * rtr << koniec ;
}
}
Wyjście:
Wciśnij elementy do wektora
Wpychanie lub dołączanie elementów do wektora to jednokierunkowe wstawianie, które można wykonać za pomocą wektor::push_back() funkcjonować.
Składnia:
wektor. push_back ( element )Jako parametr potrzebny jest element, który ma zostać wepchnięty do wektora.
Stwórzmy pusty wektor o nazwie „departments” z pięcioma ciągami znaków i wypchnijmy dwa ciągi jeden po drugim za pomocą funkcji push_back().
#include#uwzględnij
za pomocą przestrzeń nazw st ;
główny ( )
{
// Zainicjuj wektor - działy
wektor < strunowy > działy ;
cout << „Rzeczywiste wydziały:” << koniec ;
Do ( automatyczny itr = działy. zaczynać ( ) ; itr ! = działy. koniec ( ) ; ++ itr )
cout << * itr << koniec ;
// Naciśnij „Sprzedaż”
działy. push_back ( 'Obroty' ) ;
// Popchnij'
działy. push_back ( 'TO' ) ;
cout << ' \N Działy końcowe:” << koniec ;
Do ( automatyczny itr = działy. zaczynać ( ) ; itr ! = działy. koniec ( ) ; ++ itr )
cout << * itr << koniec ;
}
Wyjście:
Najpierw naciskamy przycisk „Sprzedaż”. Następnie „IT” jest wpychany do wektora. Teraz wektor „działy” zawiera dwa elementy.
Pop elementy z wektora
Jeśli chcesz usunąć ostatni element obecny w wektorze, korzystając z wektor::pop_back() funkcja jest najlepszym podejściem. Usuwa ostatni element obecny w wektorze.
Składnia:
wektor. pop_back ( )Dla tej funkcji nie jest potrzebny żaden parametr. Pokazuje niezdefiniowane zachowanie, jeśli spróbujemy usunąć ostatni element z pustego wektora.
Stwórzmy pusty wektor o nazwie „departments” z pięcioma ciągami znaków i usuńmy ostatni element, korzystając z poprzedniej funkcji. Wyświetl wektor w obu przypadkach.
#include#uwzględnij
za pomocą przestrzeń nazw st ;
główny ( )
{
// Zainicjuj wektor - działy
wektor < strunowy > działy = { 'Obroty' , 'TO' , 'Praca' , „Marketing” , „HR” } ;
cout << „Rzeczywiste wydziały:” << koniec ;
Do ( automatyczny itr = działy. zaczynać ( ) ; itr ! = działy. koniec ( ) ; ++ itr )
cout << * itr << koniec ;
// Usuń ostatni element
działy. pop_back ( ) ;
cout << ' \N Działy końcowe:” << koniec ;
Do ( automatyczny itr = działy. zaczynać ( ) ; itr ! = działy. koniec ( ) ; ++ itr )
cout << * itr << koniec ;
}
Wyjście:
„HR” to ostatni element występujący w wektorze „działy”. Zatem jest on usuwany z wektora, a końcowy wektor zawiera „Sprzedaż”, „IT”, „Usługa” i „Marketing”.
Zamień wektory
The wektor::zamień() Funkcja w C++ STL służy do zamiany wszystkich elementów występujących w dwóch wektorach.
Składnia:
pierwszy_wektor. zamieniać ( drugi_wektor )Nie uwzględnia rozmiaru wektorów, ale wektory powinny być tego samego typu (w przypadku różnych typów wektorów zgłaszany jest błąd).
Stwórzmy dwa wektory – „owoce” i „warzywa” – typu string o różnych rozmiarach. Zamień każdy z nich i wyświetl wektory w obu przypadkach.
#include#uwzględnij
za pomocą przestrzeń nazw st ;
główny ( )
{
// Inicjalizacja wektora - owoce
wektor < strunowy > owoce = { 'Jabłko' , 'Mango' } ;
cout << „Rzeczywiste owoce:” << koniec ;
Do ( automatyczny itr = owoce. zaczynać ( ) ; itr ! = owoce. koniec ( ) ; ++ itr )
cout << * itr << koniec ;
// Inicjalizacja wektora - warzywa
wektor < strunowy > warzywa = { 'Ziemniak' , 'Pomidor' , „Brinjal” } ;
cout << ' \N Rzeczywiste warzywa:” << koniec ;
Do ( automatyczny itr = warzywa. zaczynać ( ) ; itr ! = warzywa. koniec ( ) ; ++ itr )
cout << * itr << koniec ;
// Zamień elementy w obu wektorach
owoce. zamieniać ( warzywa ) ;
cout << ' \N Owoce po zamianie:' << koniec ;
Do ( automatyczny itr = owoce. zaczynać ( ) ; itr ! = owoce. koniec ( ) ; ++ itr )
cout << * itr << koniec ;
cout << ' \N Warzywa po zamianie:' << koniec ;
Do ( automatyczny itr = warzywa. zaczynać ( ) ; itr ! = warzywa. koniec ( ) ; ++ itr )
cout << * itr << koniec ;
}
Wyjście:
Poprzednio wektor „owoce” zawierał dwa elementy, a wektor „warzywa” trzy elementy. Po zamianie wektor „owoce” zawiera trzy elementy, a wektor „warzywa” zawiera dwa elementy.
Pobierz pierwszy element z wektora
W niektórych przypadkach wymagane jest zwrócenie tylko pierwszego elementu wektora. Funkcja Vector::front() w C++ STL pobiera tylko pierwszy element z wektora.
Składnia:
wektor. przód ( )Ta funkcja nie przyjmuje żadnego parametru. Jeśli wektor jest pusty, zgłaszany jest błąd.
Stwórzmy dwa wektory – „owoce” i „warzywa” – typu string i spróbujmy pobrać pierwszy element oddzielnie od dwóch wektorów.
#include#uwzględnij
za pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - owoce z 2 elementami
wektor < strunowy > owoce = { 'Jabłko' , 'Mango' } ;
// Zwraca pierwszy element
cout << owoce. przód ( ) << koniec ;
// Inicjalizacja wektora - warzywa
wektor < strunowy > warzywa ;
// Spróbuj zwrócić pierwszy element
cout << warzywa. przód ( ) ;
}
Wyjście:
„Jabłko” jest pierwszym elementem występującym w wektorze „owoce”. Zatem jest zwracany. Jednak gdy próbujemy pobrać pierwszy element z wektora „warzywa”, pojawia się błąd, ponieważ jest on pusty.
Pobierz ostatni element z wektora
Funkcja Vector::end() w języku C++ STL pobiera tylko ostatni element wektora.
Składnia:
wektor. z powrotem ( )Ta funkcja nie przyjmuje żadnego parametru. Jeśli wektor jest pusty, zgłaszany jest błąd.
Stwórzmy dwa wektory – „owoce” i „warzywa” – typu string i spróbujmy pobrać ostatni element oddzielnie od obu wektorów.
#include#uwzględnij
za pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - owoce z 2 elementami
wektor < strunowy > owoce = { 'Jabłko' , 'Mango' } ;
// Pobieranie ostatniego elementu
cout << owoce. z powrotem ( ) << koniec ;
// Zainicjuj wektor - warzywa
wektor < strunowy > warzywa ;
// Spróbuj pobrać ostatni element
cout << warzywa. z powrotem ( ) ;
}
Wyjście:
„Mango” to ostatni element występujący w wektorze „owoce”. Zatem jest zwracany. Jednak gdy próbujemy pobrać ostatni element z wektora „warzywa”, pojawia się błąd, ponieważ jest on pusty.
Przypisz nowe wartości do wektora
W niektórych scenariuszach, jeśli chcesz zaktualizować wszystkie wartości nową wartością lub utworzyć wektor z tymi samymi wartościami, najlepszym podejściem jest użycie funkcji wektor::przypisanie(). Korzystając z tej funkcji możemy:
- Utwórz wektor ze wszystkimi podobnymi elementami
- Zmodyfikuj istniejący wektor za pomocą tego samego elementu
Składnia:
wektor. przydzielać ( rozmiar, wartość )Do tej funkcji wymagane są dwa parametry.
Tutaj:
- Rozmiar określa liczbę elementów do przypisania.
- Wartość określa element, który ma zostać przypisany.
Utwórzmy wektor o nazwie „marks1” z pięcioma wartościami i zaktualizujmy ten wektor czterema elementami w taki sposób, aby wszystkie elementy zaktualizowanego wektora były równe 20.
#include#include
#uwzględnij
za pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - marks1
wektor < wew > znaki1 = { 100 , 90 , 80 , 70 , 60 } ;
cout << „Rzeczywisty wektor:” << koniec ;
Do ( wew I = 0 ; I < znaki1. rozmiar ( ) ; I ++ )
cout << znaki1 [ I ] << koniec ;
znaki1. przydzielać ( 4 , 20 ) ;
cout << ' \N Zaktualizowany wektor:” << koniec ;
Do ( wew I = 0 ; I < znaki1. rozmiar ( ) ; I ++ )
cout << znaki1 [ I ] << koniec ;
}
Wyjście:
Poprzednio wektor zawierał pięć różnych elementów. Teraz zawiera tylko cztery elementy i wszystkie są równe 20.
Rozszerz wektor za pomocą Emplace()
Wiemy już, że nowe elementy są wstawiane dynamicznie w dowolnym miejscu wektora. Jest to możliwe przy użyciu funkcji Vector::emplace(). Przyjrzyjmy się szybko składni i parametrom akceptowanym przez tę funkcję.
Składnia:
wektor. Lokalizacja ( pozycja const_iterator, element )Do tej funkcji przekazywane są dwa obowiązkowe parametry.
Tutaj:
- Pierwszy parametr przyjmuje pozycję dzięki czemu możemy wstawić element w dowolnej pozycji. Pozycję możemy uzyskać za pomocą funkcji iteratora Begin() lub end().
- Drugi parametr to element, który należy wstawić do wektora.
Rozważ wektor „chemikaliów” z dwoma elementami.
- Wpisz „Mangan” na pierwszej pozycji – rozpocznij (chemikalia)
- Na ostatniej pozycji wstaw „Miedź” – koniec (chemikalia)
- Wpisz „Siarka” na trzeciej pozycji – Begin(chemikalia)+2
#include
#uwzględnij
za pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - chemikalia
wektor < strunowy > chemikalia = { 'Tlen' , 'WSPÓŁ' } ;
cout << „Rzeczywiste chemikalia:” << koniec ;
Do ( wew I = 0 ; I < chemikalia. rozmiar ( ) ; I ++ )
cout << chemikalia [ I ] << koniec ;
// Wstaw element na pierwszej pozycji
chemikalia. Lokalizacja ( zaczynać ( chemikalia ) , 'Mangan' ) ;
// Wstaw element na ostatniej pozycji
chemikalia. Lokalizacja ( koniec ( chemikalia ) , 'Miedź' ) ;
// Wstaw element na trzeciej pozycji
chemikalia. Lokalizacja ( zaczynać ( chemikalia ) + 2 , 'Siarka' ) ;
cout << ' \N Końcowe chemikalia:” << koniec ;
Do ( wew I = 0 ; I < chemikalia. rozmiar ( ) ; I ++ )
cout << chemikalia [ I ] << koniec ;
}
Wyjście:
Teraz końcowy wektor zawiera pięć elementów (pokazanych na poniższym zrzucie ekranu).
Rozszerz wektor za pomocą Emplace_Back()
Można dodać element (dodając na końcu wektora), co można zrobić za pomocą wektor::emplace_back() funkcjonować.
Składnia:
wektor. miejsce_powrót ( element )Obowiązkowe jest przekazanie elementu, który ma zostać dołączony do wektora, jako parametru.
Dodajmy dwa elementy jeden po drugim za pomocą funkcji emplace_back().
#include#include
#uwzględnij
za pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - chemikalia
wektor < strunowy > chemikalia = { 'Tlen' , 'WSPÓŁ' } ;
cout << „Rzeczywiste chemikalia:” << koniec ;
Do ( wew I = 0 ; I < chemikalia. rozmiar ( ) ; I ++ )
cout << chemikalia [ I ] << koniec ;
// Wstaw mangan na końcu wektora
chemikalia. miejsce_powrót ( 'Mangan' ) ;
// Wstaw mangan na końcu wektora
chemikalia. miejsce_powrót ( 'Miedź' ) ;
cout << ' \N Końcowe chemikalia:” << koniec ;
Do ( wew I = 0 ; I < chemikalia. rozmiar ( ) ; I ++ )
cout << chemikalia [ I ] << koniec ;
}
Wyjście:
Teraz końcowy wektor zawiera cztery elementy po dodaniu „Manganu” i „Miedzi”.
Maksymalny element wektora
- Utwórz wektor z pewnymi elementami.
- Aby znaleźć maksymalny element występujący w wektorze, użyj funkcji *max_element(), która przyjmuje jako argumenty dwa iteratory. Te dwa parametry pełnią rolę zakresu, a maksymalny element jest zwracany w podanym zakresie. Pozycja początkowa to Begin(), a ostatnia pozycja to end().
Rozważmy wektor o nazwie „item_costs”, który przechowuje pięć wartości typu całkowitego i zwraca element maksymalny.
#uwzględnij#include
#include
za pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - koszt_przedmiotu
wektor < wew > koszt_przedmiotu = { 8900 , 5677 , 200 , 1000 , 2300 } ;
cout << „Koszt przedmiotów: \N ' ;
Do ( wew I = 0 ; I < koszt_przedmiotu. rozmiar ( ) ; I ++ )
cout << koszt_przedmiotu [ I ] << koniec ;
// Zwraca maksymalny element z powyższego wektora - koszt_przedmiotu
cout << ' \N Maksymalny koszt: ' << * max_element ( zaczynać ( koszt_przedmiotu ) ,koniec ( koszt_przedmiotu ) ) ;
}
Wyjście:
Tutaj 8900 jest maksymalnym elementem spośród wszystkich elementów obecnych w wektorze „item_costs”.
Minimalny element wektora
- Utwórz wektor z pewnymi elementami.
- Aby znaleźć minimalny element występujący w wektorze, użyj funkcji *min_element(), która przyjmuje jako argumenty dwa iteratory. Te dwa parametry pełnią rolę zakresu, a element minimalny (mniejszy niż wszystkie inne elementy) jest zwracany w podanym zakresie. Pozycja początkowa to Begin(), a ostatnia pozycja to end().
Użyj tego samego wektora, który został utworzony, aby znaleźć element maksymalny i znaleźć element minimalny za pomocą funkcji *min_element().
#uwzględnij#include
#include
za pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - koszt_przedmiotu
wektor < wew > koszt_przedmiotu = { 8900 , 5677 , 200 , 1000 , 2300 } ;
cout << „Koszt przedmiotów: \N ' ;
Do ( wew I = 0 ; I < koszt_przedmiotu. rozmiar ( ) ; I ++ )
cout << koszt_przedmiotu [ I ] << koniec ;
// Zwraca minimalny element z powyższego wektora – koszt_przedmiotu
cout << ' \N Minimalny koszt: ' << * min_element ( zaczynać ( koszt_przedmiotu ) ,koniec ( koszt_przedmiotu ) ) ;
}
Wyjście:
Tutaj 200 jest minimalnym elementem spośród wszystkich elementów obecnych w wektorze „item_costs”.
Suma elementów w wektorze
Aby zwrócić sumę wszystkich elementów występujących w wektorze, należy zastosować metodę gromadzić() używana jest funkcja w języku C++ STL. Akceptuje trzy parametry. Pierwszy parametr przyjmuje pierwszy indeks reprezentujący element początkowy w zakresie (określ iterator Begin()), a drugi parametr przyjmuje ostatni indeks reprezentujący element końcowy w zakresie (określ iterator end()). Na koniec musimy przekazać wartość początkową sumy (w naszym przypadku jest to 0).
gromadzić ( pierwszy_indeks, ostatni_indeks, wartość_początkowa ) ;Utwórz wektor o nazwie „item_costs” z pięcioma elementami typu całkowitego i oblicz sumę.
#includeza pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - koszt_przedmiotu
wektor < wew > koszt_przedmiotu = { 8900 , 5677 , 200 , 1000 , 2300 } ;
cout << „Koszt przedmiotów: \N ' ;
Do ( wew I = 0 ; I < koszt_przedmiotu. rozmiar ( ) ; I ++ )
cout << koszt_przedmiotu [ I ] << koniec ;
// Zwraca sumę wszystkich elementów powyższego wektora - item_costs
cout << ' \N Całkowity koszt: ' << gromadzić ( zaczynać ( koszt_przedmiotu ) ,koniec ( koszt_przedmiotu ) , 0 ) ;
}
Wyjście:
Suma 8900, 5677, 200, 1000, 2300 wynosi 18077.
Mnożenie elementarne dwóch wektorów
- Utwórz dwa wektory typu numeric, przy czym dwa wektory muszą być tego samego rozmiaru (całkowita liczba elementów występujących w pierwszym wektorze = całkowita liczba elementów występujących w drugim wektorze).
- Zadeklaruj nowy wektor i użyj metody dla pętli , wykonaj operację mnożenia na dwóch elementach w każdej iteracji i zapisz wartość w utworzonym wektorze za pomocą funkcji push_back(). Do ( wew itr = 0 ; I < pierwszy_vec. rozmiar ( ) ; itr ++ )
- Wyświetl elementy obecne w wynikowym wektorze, iterując go.
{
wektor_wyniku. push_back ( pierwszy_vec [ itr ] * sekunda_rzecz [ itr ] ) ;
}
Utwórz wektor o nazwie „item_costs” z pięcioma elementami typu całkowitego i oblicz sumę.
#includeza pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz dwa wektory - produkty1 i produkty2, każdy po 5 elementów
wektor < wew > produkty1 = { 10 , 20 , 30 , 40 , pięćdziesiąt } ;
wektor < wew > produkty2 = { pięćdziesiąt , 40 , 30 , 70 , 60 } ;
wektor < wew > produkty_wynikowe ;
// Wykonaj mnożenie elementów
Do ( wew I = 0 ; I < produkty1. rozmiar ( ) ; I ++ ) {
produkty_wynikowe. push_back ( produkty1 [ I ] * produkty2 [ I ] ) ;
}
// Wyświetl wynikowy wektor
cout << „Mnożenie wektorów: \N ' ;
Do ( wew rez : produkty_wynikowe )
cout << rez << koniec ;
}
Wyjście:
Iteracja - 1 : 10 * pięćdziesiąt => 500Iteracja - 2 : 20 * 40 => 800
Iteracja - 3 : 30 * 30 => 900
Iteracja - 4 : 40 * 70 => 2800
Iteracja - 5 : pięćdziesiąt * 60 => 3000
Iloczyn skalarny dwóch wektorów
W przypadku wektorów C++ iloczyn skalarny definiuje się jako „sumę iloczynów odpowiednich wpisów dwóch sekwencji wektorów”.
Składnia:
produkt_wewnętrzny ( Najpierw wektor1, ostatni wektor1, najpierw wektor2, wartość początkowa )Użyj funkcji inside_product(), aby zwrócić iloczyn skalarny. Funkcja ta przyjmuje cztery wymagane parametry.
Tutaj:
- Pierwszy parametr odnosi się do iteratora, który wskazuje początek pierwszego wektora (określ za pomocą funkcji Begin()).
- Drugi parametr odnosi się do iteratora, który wskazuje koniec pierwszego wektora (określ za pomocą funkcji end()).
- Trzeci parametr odnosi się do iteratora, który wskazuje początek drugiego wektora (określ za pomocą funkcji Begin()).
- Wartość początkową należy przekazać jako ostatni parametr, który jest liczbą całkowitą służącą do akumulacji iloczynu skalarnego.
Wykorzystaj ten sam program, który został stworzony do mnożenia dwóch wektorów i użyj funkcji innsr_product(), aby znaleźć iloczyn skalarny dwóch wektorów.
#includeza pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz dwa wektory - produkty1 i produkty2, każdy po 5 elementów
wektor < wew > produkty1 = { 10 , 20 , 30 , 40 , pięćdziesiąt } ;
wektor < wew > produkty2 = { pięćdziesiąt , 40 , 30 , 70 , 60 } ;
// Wyświetl wynikowy wektor
cout << „Iloczyn kropkowy produktów1 i produktów2:” ;
cout << produkt_wewnętrzny ( zaczynać ( produkty1 ) ,koniec ( produkty1 ) ,zaczynać ( produkty2 ) , 0 ) ;
}
Wyjście:
( 10 * pięćdziesiąt ) + ( 20 * 40 ) + ( 30 * 30 ) + ( 40 * 70 ) + ( pięćdziesiąt * 60 )=> 500 + 800 + 900 + 2800 + 3000
=> 8000
Konwertuj zbiór na wektor
Istnieje wiele sposobów konwersji zbioru na wektor poprzez przekazanie wszystkich elementów podniesionych w zestawie do wektora. Najlepszym i najprostszym sposobem jest użycie funkcji std::copy().
Składnia
st :: Kopiuj ( najpierw sourceIterator, na końcu sourceIterator, najpierw docelowyIterator )Użyj std::kopia() funkcja wstawiająca elementy ze zbioru do wektora. Wymaga trzech parametrów.
Tutaj:
- Pierwszy parametr odnosi się do iteratora źródłowego, który wskazuje pierwszy element iteratora. Tutaj set jest iteratorem źródłowym określonym za pomocą funkcji Begin().
- Podobnie drugi parametr wskazuje na ostatni element (funkcja end()).
- Trzeci parametr odnosi się do iteratora docelowego, który wskazuje pierwszy element (określony za pomocą funkcji Begin()) w iteratorze.
Utwórzmy zbiór z pięcioma uczniami i skopiujmy wszystkie elementy do wektora, korzystając z poprzedniej funkcji.
#includeza pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz zestaw - uczniowie z 5 elementami
ustawić < strunowy > studenci = { „Srawan” , 'Konstabl' , „Madhu” , „Meghana” , „Lawana” } ;
cout << 'Ustawić: \N ' ;
Do ( ciąg I : studenci )
cout << I << koniec ;
// Utwórz wektor - rozmiar student_vcof równy rozmiarowi zestawu
wektor < strunowy > student_vc ( studenci. rozmiar ( ) ) ;
// Wstaw elementy ze zbioru - studenci do wektora - student_vc.
Kopiuj ( studenci. zaczynać ( ) , studenci. koniec ( ) , student_vc. zaczynać ( ) ) ;
cout << ' \N Wektor: \N ' ;
Do ( ciąg I : student_vc )
cout << I << koniec ;
}
Wyjście:
Teraz wszystkie elementy znajdujące się w zestawie „Students” są kopiowane do wektora „students_vc”.
Usuń zduplikowane elementy
- Najpierw musimy posortować elementy wektora tak, aby wszystkie zduplikowane elementy sąsiadowały ze sobą za pomocą metody std::sort() funkcjonować. st :: sortować ( Najpierw wektor, potem wektor ) ;
- Użyj funkcji std::unique(), aby wybrać zduplikowane elementy. Jednocześnie użyj funkcji erase() w celu usunięcia duplikatów zwracanych przez funkcję std::unique(). Kolejność elementów w ostatecznym wektorze może ulec zmianie. wektor. usuwać ( st :: unikalny ( Najpierw wektor, potem wektor ) , Ostatni wektor ) )
Utwórz wektor „studentów” składający się z 10 elementów i zwróć wektor, usuwając duplikaty.
#includeza pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - uczniowie z 10 elementami
wektor < strunowy > studenci = { „Srawan” , 'Konstabl' , „Madhu” , „Meghana” , „Lawana” ,
„Srawan” , 'Konstabl' , „Madhu” , „Meghana” , „Lawana” } ;
cout << „Studenci: \N ' ;
Do ( ciąg I : studenci )
cout << I << ' ' ;
// Sortuj wszystkie elementy wektora uczniów.
sortować ( zaczynać ( studenci ) , koniec ( studenci ) ) ;
// Użyj funkcji Unique(), aby usunąć duplikaty za pomocą funkcji Erase().
studenci. usuwać ( unikalny ( zaczynać ( studenci ) , koniec ( studenci ) ) , koniec ( studenci ) ) ;
cout << ' \N \N Wyjątkowi studenci: \N ' ;
Do ( automatyczny itr = czacznij ( studenci ) ; itr ! = kilka ( studenci ) ; ++ itr ) {
cout << * itr << ' ' ;
}
}
Wyjście:
Teraz wszystkie elementy są unikalne w wektorze.
Konwertuj wektor na zbiór
Zestaw nie pozwala na powielanie elementów. Jeśli piszesz, aby wstawić wektor do zestawu z duplikatami, zostaną one zignorowane. Używamy tej samej funkcji std::copy(), która została użyta w poprzednim scenariuszu, podczas którego konwertowano zbiór na wektor.
W tym scenariuszu:
- Pierwszy parametr przyjmuje wektor jako iterator źródłowy określony za pomocą funkcji Begin().
- Drugi parametr przyjmuje wektor jako iterator źródłowy określony za pomocą funkcji end().
- Przekaż funkcję std::inserter(), która służy do automatycznego nadpisywania/kopiowania elementów w określonej pozycji w zestawie, podając zestaw i iterator wskazujący koniec zestawu jako parametry.
Stwórzmy wektor składający się z 10 liczb całkowitych i skopiujmy elementy do zbioru.
#includeza pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz zestaw - zaznacza 10 wartości
wektor < wew > znaki = { 12 , 3. 4 , 56 , 78 , 65 , 78 , 90 , 90 , 78 , 3. 4 } ;
cout << 'Wektor: \N ' ;
Do ( wew I : znaki )
cout << I << ' ' ;
// Utwórz zestaw - zestaw_znaków o rozmiarze równym rozmiarowi wektora
ustawić < wew > znaki_zestaw ;
// Wstaw elementy ze zbioru - studenci do wektora - student_vc.
Kopiuj ( zaczynać ( znaki ) ,koniec ( znaki ) , wkładacz ( znaki_zestaw, koniec ( znaki_zestaw ) ) ) ;
cout << ' \N \N Ustawić: \N ' ;
Do ( wew I : znaki_zestaw )
cout << I << ' ' ;
}
Wyjście:
Istniejący wektor o nazwie „znaki” ma 10 wartości. Po skopiowaniu go do zbioru „marks_set” zawiera tylko sześć elementów, ponieważ pozostałe cztery elementy są zduplikowane.
Usuń puste ciągi
Puste ciągi znaków obecne w wektorze nie mają zastosowania. Dobrą praktyką jest usuwanie pustych ciągów znaków obecnych w wektorze. Zobaczmy, jak usunąć puste ciągi z wektora C++:
- Iteruj wektor za pomocą pętli „for”.
- W każdej iteracji sprawdź, czy element jest pusty („”) lub czy nie używasz operatora „==” z funkcją członkowską at().
- Używając funkcji std::erase() usuń puste ciągi znaków po sprawdzeniu poprzedniego warunku.
- Powtarzaj krok 2 i krok 3 aż do końca wektora.
Stwórzmy wektor „firm” z 10 ciągami znaków. Wśród nich pięć jest pustych i usuwamy je, wdrażając poprzednie podejście.
#include#uwzględnij
za pomocą przestrzeń nazw st ;
główny ( ) {
wektor < strunowy > firmy { „Firma-A” , „” , „Firma B” ,
„” , „Firma-C” , „” , „Firma-D” , „” , „” , „” } ;
// Iteruj po firmach
// i usuń puste elementy za pomocą funkcji erase()
Do ( wew itr = 1 ; itr < firmy. rozmiar ( ) ; ++ itr ) {
Jeśli ( firmy. Na ( itr ) == „” ) {
firmy. usuwać ( firmy. zaczynać ( ) + itr ) ;
-- itr ;
}
}
// Wyświetl wektor
Do ( automatyczny & I : firmy ) {
cout << I << koniec ;
}
}
Wyjście:
Teraz wektor „firm” zawiera niepuste ciągi znaków.
Zapisz wektor do pliku tekstowego
Omówmy, jak zapisać wszystkie elementy obecne w wektorze do pliku przy użyciu indeksów wektorów za pomocą fstream .
- Wciśnij do niego niektóre elementy za pomocą funkcji push_back po inicjalizacji wektora.
- Użyj funkcji open() z biblioteki „fstream” w trybie out.
- Przemierzaj każdy element występujący w wektorze, korzystając z indeksów w pętli „for” i zapisz każdy element w dostarczonym pliku.
- Na koniec zamknij plik.
Zaimplementujmy poprzednie podejście, uruchamiając kod C++.
#uwzględnij#include
#include
#include
za pomocą przestrzeń nazw st ;
główny ( )
{
// Utwórz wektor - v_data
// i włóż do niego dwa elementy.
wektor < strunowy > v_dane ;
v_dane. push_back ( 'Powitanie' ) ;
v_dane. push_back ( „do LinuksaWskazówka” ) ;
strumień f ;
// Otwórz plik
F. otwarty ( „plik_pisany.txt” ,ios_base :: na zewnątrz ) ;
// Iteruj każdy element wektora i zapisz jeden po drugim do pliku.
Do ( wew I = 0 ; I < v_dane. rozmiar ( ) ; I ++ )
{
F << v_dane [ I ] << koniec ;
}
// Zamknij plik
F. zamknąć ( ) ;
}
Wyjście:
Wektor „v_data” zawiera dwa elementy, a w ścieżce, w której wykonywany jest program, tworzony jest plik z elementami obecnymi w wektorze.
Utwórz wektor z pliku tekstowego
Dowiedzieliśmy się jak zapisać elementy obecne w wektorze do pliku tekstowego. Tutaj utwórzmy wektor z treści zawartej w pliku tekstowym.
- Stworzyć ' jeśli strumień” zmienna służąca do odczytania informacji z pliku tekstowego, w którym z pliku tworzymy wektor.
- Utwórz pusty wektor do przechowywania zawartości pliku i użyj pustej zmiennej łańcuchowej jako flagi, aby sprawdzić koniec pliku.
- Przeczytaj następną linię z pliku, aż dotrze do końca (w zasadzie za pomocą pętli „while”). Użyj funkcji push_back(), aby przeczytać następną linię i wepchnąć ją do wektora.
- Wyświetl oddzielnie linię obecną w linii, aby zobaczyć elementy obecne w wektorze na konsoli.
Zaimplementujmy poprzednie podejście, uruchamiając kod C++. Rozważmy plik „data.txt” o następującej zawartości. Tutaj nazwa wektora to „v_data”.
#include
za pomocą przestrzeń nazw st ;
główny ( )
{
// Otwórz plik tekstowy - dane
plik ifstream ( „dane.txt” ) ;
// Utwórz wektor - v_data typu - string
wektor < strunowy > v_dane ;
stringi były ;
// Przeczytaj następną linię z pliku data.txt
// aż do końca.
chwila ( plik >> był ) {
// Przeczytaj następną linię i wciśnij do pliku v_data
v_dane. push_back ( był ) ;
}
// Wyświetl oddzielnie linię znajdującą się w linii.
Kopiuj ( v_dane. zaczynać ( ) , v_data. koniec ( ) , ostream_iterator < strunowy > ( cout , ' \N ' ) ) ;
}
Wyjście:
Widzimy, że „v_data” zawiera pięć elementów pochodzących z pliku.
Wniosek
W tym długim artykule zbadaliśmy wszystkie możliwe przykłady, które są wykorzystywane w aplikacjach czasu rzeczywistego związanych z wektorami w języku programowania C++. Każdy przykład jest wyjaśniony za pomocą składni, parametrów i przykładu z wynikami. Komentarze są dodawane do każdego kodu, aby uzyskać jasne zrozumienie kodu.