Przykłady wektora C ++ wskaźników

Przykłady wektora C ++ wskaźników
Zwykły wektor napotkany w programowaniu C ++ jest wektorem obiektów tego samego typu. Te obiekty mogą być fundamentalnymi obiektami lub obiektami utworzonymi z klasy. W tym artykule ilustruje przykłady wektora wskaźników, do tego samego typu obiektu. Aby użyć wektora C ++, program musi zawierać bibliotekę wektorową z dyrektywą.

Cały kod wektorowy dla tego artykułu jest w funkcji Main (), chyba że wskazano inaczej. Wektor wskaźników do różnych typów jest jednak adresowany na końcu artykułu. Aby docenić wektorowe punkty, dobrze jest przypomnieć sobie wiedzę na temat wektora przedmiotów.

Treść artykułu

  • Przywołaj dla wektora obiektów
  • Wektor wskaźników tego samego typu
  • Wektor wskaźników do różnych typów
  • Wniosek

Przywołanie dla wektora obiektów

Wektor przykładu znaku
Poniższy program pokazuje przykład wektora znaków:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

wektor vtr = „u”, „v”, „w”, „x”, „y”, 'z';
dla (int i = 0; iCout << vtr[i] << ";
Cout << endl;
for (wektor :: iterator it = vtr.zaczynać(); To != vtr.koniec(); it ++)
Cout << *it << ";
Cout << endl;
powrót 0;

Wyjście to:

U v w x y z
U v w x y z

Ta sama lista została wyświetlona dwukrotnie. Pierwsze stwierdzenie w funkcji Main () tworzy wektor znanych. Następne dwa segmenty kodu, wydrukuj tę samą listę wektorów na terminalu. Pierwszy z tych segmentów kodu używa indeksów. Drugi używa iteratorów.

Wektor przykładu całkowitego
Poniższy program pokazuje przykład wektora Ints:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

wektor vtr = 1, 2, 3, 4, 5, 6;
dla (int i = 0; iCout << vtr[i] << ";
Cout << endl;
for (wektor :: iterator it = vtr.zaczynać(); To != vtr.koniec(); it ++)
Cout << *it << ";
Cout << endl;
powrót 0;

Wyjście to:

1 2 3 4 5 6
1 2 3 4 5 6

Ta sama lista została wyświetlona dwukrotnie, w ten sam sposób, co w poprzednim kodzie.

Wektor przykładu obiektu String
Wskaźnik const do znaków, wskazuje na literał smyczkowy. Obiekt ciągu jest utworzony z klasy String. Aby mieć obiekt ciąg. Możliwe jest i łatwo mieć wektor obiektów ciągów, jak pokazuje następujący program:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

vector vtr = „one”, „dwa”, „trzy”, „cztery”, „pięć”;
dla (int i = 0; iCout << vtr[i] << ";
Cout << endl;
for (wektor :: iterator it = vtr.zaczynać(); To != vtr.koniec(); it ++)
Cout << *it << ";
Cout << endl;
powrót 0;

Wyjście to:

jeden dwa trzy cztery pięć
jeden dwa trzy cztery pięć

Ta sama lista została wyświetlona dwukrotnie, w ten sam sposób, co w poprzednim kodzie.

Wektor przykładu instanowanego obiektu
Programista może tworzyć własną klasę, tworzyć obiekty z klasy, a następnie umieścić obiekty w wektorze. Poniższy program ilustruje to:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
klasa thecla
publiczny:
const char* str;
Thecla (char chs [])
str = chs;

;
int main ()

char cH1 [] = "text1", ch2 [] = "text2", ch3 [] = "text3", ch4 [] = "text4", ch5 [] = "text5";
Thecla OBJ1 (CH1), OBJ2 (CH2), OBJ3 (CH3), OBJ4 (CH4), OBJ5 (CH5);
wektor vtr = obj1, obj2, obj3, obj4, obj5;
dla (int i = 0; iCout << vtr[i].str << ";
Cout << endl;
for (wektor :: iterator it = vtr.zaczynać(); To != vtr.koniec(); it ++)
Cout Cout << endl;
powrót 0;

Wyjście to:

Text1 Text2 Text3 Text4 Text5
Text1 Text2 Text3 Text4 Text5

Ta sama lista została wyświetlona dwukrotnie, w ten sam sposób, co w poprzednim kodzie.

Klasa ma konstruktor i jeden członek danych publicznych. Konstruktor przypisuje swój argument do tego członka danych.

Wartości wektora, tym razem, to literały ciągów, a nie obiekty ciągne. Zwróć więc uwagę na sposób kodowania literałów i wektorów.

Jeśli obiektem utworzonym z klasy jest OBJ, wówczas wartość członka, Str będzie dostępny przez obiekt, jako:

obj.str

OBJ w tym przypadku jest odniesieniem. Zwróć uwagę na użycie operatora kropki. Właśnie dlatego w segmencie kodu ostatniego jednego, w funkcji Main (), dostęp do każdej wartości wektora:

vtr [i].str

gdzie [i] jest indeksem.

Jeśli wskaźnikiem do OBJ jest „IT”, to wartość członka, Str będzie dostępny przez obiekt, jako:

It-> str

Zwróć uwagę na użycie operatora strzałek tutaj. Iterator jest jak wskaźnik. Dlatego w ostatnim segmencie kodu dostęp do każdej wartości wektora:

It-> str

gdzie „to” jest iteratorem.

Wektor wskaźników tego samego typu

Przykład dla wektora wskaźników do postaci
Poniższy program pokazuje przykład wektora wskaźników do Chars:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

char cH1 = 'u', ch2 = 'v', ch3 = 'w', ch4 = 'x', ch5 = 'y', ch6 = 'z';
Vector vtr = & CH1, & CH2, & CH3, i CH4, & CH5, & CH6;
dla (int i = 0; iCout << *vtr[i] << ";
Cout << endl;
for (wektor :: iterator it = vtr.zaczynać(); To != vtr.koniec(); it ++)
Cout << **it << ";
Cout << endl;
powrót 0;

Wyjście to:

U v w x y z
U v w x y z

Ta sama lista została wyświetlona dwukrotnie. Pierwsze stwierdzenie w funkcji Main () tworzy 6 znaków z ich identyfikatorami. Drugie stwierdzenie reprezentuje te znaki, z ich adresami w pamięci; i to powoduje wektor wskaźników do Charsa. Zwróć uwagę na argument szablonu tego wektora. Następne dwa segmenty kodu, wydrukuj tę samą listę wektorów na terminalu. Pierwszy z tych segmentów kodu używa indeksów. Drugi używa iteratorów.

W przypadku pierwszego z tych segmentów kodu, ponieważ każdy element w wektorze jest wskaźnikiem, odniesienie indeksu musi zostać odniesione przez operatora pośredniego, *.

Iterator jest jak wskaźnik. Dla drugiego z tych segmentów kodu, ponieważ każdy element w wektorze jest wskaźnikiem, a iterator jest jak wskaźnik, każdy element jest postrzegany jako wskaźnik do wskaźnika. I tak każdy element musi być dwukrotnie oddzielony, z **.

Przykład wektora wskaźników do liczb całkowitych
Poniższy program, który jest podobny do powyższego, pokazuje przykład wektora wskaźników do ints:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

int int1 = 1000, int2 = 2000, int3 = 3000, int4 = 4000, int5 = 5000, int6 = 6000;
wektor vtr = & int1, & int2, & int3, & int4, & int5, & int6;
dla (int i = 0; iCout << *vtr[i] << ";
Cout << endl;
for (wektor :: iterator it = vtr.zaczynać(); To != vtr.koniec(); it ++)
Cout << **it << ";
Cout << endl;
powrót 0;

Wyjście to:

1000 2000 3000 4000 5000 6000
1000 2000 3000 4000 5000 6000

Ta sama lista została wyświetlona dwukrotnie, w ten sam sposób, co z poprzedniego kodu.

Przykład wektora wskaźników do przesyłania obiektów
Wskaźnik const do znaków, wskazuje na literał smyczkowy. Obiekt ciągu jest utworzony z klasy String. Aby mieć obiekt ciąg. Możliwe jest i łatwo mieć wektor wskaźników do ciągnięcia obiektów, jak pokazuje następujący program:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

String str1 = "aaa", str2 = "bbb", str3 = "ccc", str4 = "ddd", str5 = "eee", str6 = "fff";
Vector vtr = & Str1, & Str2, & Str3, & Str4, & Str5, & Str6;
dla (int i = 0; iCout << *vtr[i] << ";
Cout << endl;
for (wektor :: iterator it = vtr.zaczynać(); To != vtr.koniec(); it ++)
Cout << **it << ";
Cout << endl;
powrót 0;

Wyjście to:

AAA BBB CCC DDD EEE FFF
AAA BBB CCC DDD EEE FFF

Ta sama lista została wyświetlona dwukrotnie, w ten sam sposób, co z poprzedniego kodu.

Wektor wskazówek do obiektów klasowych zdefiniowanych przez użytkownika

Programista może tworzyć własną klasę, utworzyć instancję obiektów z klasy, a następnie umieszczać wskazówki do obiektów, w wektorze. Poniższy program ilustruje to:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
klasa thecla
publiczny:
const char* str;
Thecla (char chs [])
str = chs;

;
int main ()

char cH1 [] = "text1", ch2 [] = "text2", ch3 [] = "text3", ch4 [] = "text4", ch5 [] = "text5";
Thecla OBJ1 (CH1), OBJ2 (CH2), OBJ3 (CH3), OBJ4 (CH4), OBJ5 (CH5);
wektor vtr = & obj1, i obj2, i obj3 i obj4, i obj5;
dla (int i = 0; iCout Cout << endl;
for (wektor :: iterator it = vtr.zaczynać(); To != vtr.koniec(); it ++)
Cout Cout << endl;
powrót 0;

Wyjście to:

Text1 Text2 Text3 Text4 Text5
Text1 Text2 Text3 Text4 Text5

Ta sama lista została wyświetlona dwukrotnie, w ten sam sposób, co w poprzednim kodzie.

Klasa ma konstruktor i jeden członek danych publicznych. Konstruktor przypisuje swój argument do tego członka danych.

Wartości wektora, tym razem, to literały ciągów, a nie obiekty ciągne. Zwróć więc uwagę na sposób kodowania literałów i wektorów.

Jeśli obiektem utworzonym z klasy jest OBJ, wówczas wartość członka, Str będzie dostępny przez obiekt, jako:

obj.str

OBJ w tym przypadku jest odniesieniem. Jeśli wskaźnikiem do OBJ jest PTR, wówczas wartość członka, SIR będzie dostępny przez wskaźnik, jako:

ptr-> str

Właśnie dlatego w segmencie kodu ostatniego drugiego, dostęp do każdej wartości wektora::

vtr [i]-> str

Jeśli PTRPTR jest wskaźnikiem do PTR (wskaźnik do wskaźnika), wartość członka, SIR będzie dostępny przez wskaźnik, ponieważ:

(*ptrptr)-> str

Nawiasy zapewniają, że (*ptrptr) jest najpierw oceniany zamiast możliwej pierwszej oceny (ptrptr-> str).

Iterator jest jak wskaźnik. Właśnie dlatego w ostatnim segmencie kodu dostęp do każdej wartości wektora:

(*it)-> str

gdzie „to” jest iteratorem.

Wektor wskaźników do różnych typów

Aby mieć wektor wskazówek do różnych typów, użyj następującej procedury:

  • Niech szablon wektora, zostanie wskaźnik do unieważnienia.
  • Niech wartości wektorów będą adresami różnych obiektów różnych typów.
  • Podczas czytania wartości wrzuć wskaźniki pustki do swoich odpowiednich typów.

Poniższy program ilustruje je z obiektami char, int i string:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

char ch = „u”;
int inte = 1000;
String str = "kocham cię.";
vector vtr = & ch, & inte, & str;
Cout << *((char*)vtr[0]) << endl;
Cout << *((int*)vtr[1]) << endl;
Cout << *((string*)vtr[2]) << endl;
powrót 0;

Wyjście to:

U
1000
Kocham cię.

Wniosek

Wektor wskaźników jest podobny do wektora obiektów. Główne różnice są następujące: wartości wektora wskaźników muszą być adresami obiektów zadeklarowanych lub utworzonych z klasy. Załóżmy, że nazwa klasy to thecla, a następnie argument szablonu wektora musi być „thecla*”. Adres obiektu jest uzyskiwany przez poprzedzanie identyfikatora obiektu, z i .