Zugriff auf Member-Funktionen vom Zeiger auf einen Vektor in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden der -> Notation für den Zugriff auf Member-Funktionen von einem Zeiger auf einen Vektor
  2. Verwendung der (*)vector.member-Notation für den Zugriff auf Member-Funktionen vom Zeiger auf einen Vektor
Zugriff auf Member-Funktionen vom Zeiger auf einen Vektor in C++

In diesem Artikel werden verschiedene Methoden erläutert, wie man in C++ auf Member-Funktionen von einem Zeiger auf einen Vektor zugreifen kann.

Verwenden der -> Notation für den Zugriff auf Member-Funktionen von einem Zeiger auf einen Vektor

vector-Mitgliedsfunktionen können vom Zeiger auf den Vektor mit dem ->-Operator aufgerufen werden. In diesem Fall übergeben wir den Zeiger auf den Vektor an eine andere Funktion. Als Member-Funktionen muss auf jedes Datenmitglied des struct/class mit der -> Notation zugegriffen werden. Beachten Sie, dass bei der Übergabe des Zeigers auf das Objekt an die andere Funktion die Adresse des Operators (&) vor der Variablen verwendet werden sollte.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

template <typename T>
void printVectorElements(vector<T> *vec) {
  for (auto i = 0; i < vec->size(); ++i) {
    cout << vec->at(i) << "; ";
  }
  cout << endl;
}

int main() {
  vector<string> str_vec = {"bit",    "nibble",     "byte",      "char",
                            "int",    "long",       "long long", "float",
                            "double", "long double"};

  printVectorElements(&str_vec);

  return EXIT_SUCCESS;
}

Ausgabe:

bit; nibble; byte; char; int; long; long long; float; double; long double;

Verwendung der (*)vector.member-Notation für den Zugriff auf Member-Funktionen vom Zeiger auf einen Vektor

Der Zugriff auf den Wert, auf den der Zeiger zeigt, erfolgt über eine Dereferenzierungsoperation, die den ->-Operator funktional ersetzen kann und die Lesbarkeit verbessert. Der Ausdruck (*vec).at(i) kann im Wesentlichen die gleiche Operation des Member-Zugriffs durchführen. Beachten Sie, dass wir die Funktionsvorlage verwenden, die einen Vektor mit Elementen vom generischen Typ ausgeben kann.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

template <typename T>
void printVectorElements(vector<T> *vec) {
  for (auto i = 0; i < (*vec).size(); ++i) {
    cout << (*vec).at(i) << "; ";
  }
  cout << endl;
}

int main() {
  vector<string> str_vec = {"bit",    "nibble",     "byte",      "char",
                            "int",    "long",       "long long", "float",
                            "double", "long double"};

  printVectorElements(&str_vec);

  return EXIT_SUCCESS;
}

Ausgabe:

bit; nibble; byte; char; int; long; long long; float; double; long double;

Nehmen wir alternativ an, dass der Zeiger auf den vector mit dem Funktionsaufruf new alloziert wird und die Variable nicht an die andere Funktion übergeben wird. In diesem Fall kann man jede der obigen Notationen wählen. Im folgenden Beispiel demonstrieren wir die Iteration der Vektorelemente und die Ausgabeoperation mit dem ->-Operator.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

template <typename T>
void printVectorElements(vector<T> *vec) {
  for (auto i = 0; i < vec->size(); ++i) {
    cout << vec->at(i) << "; ";
  }
  cout << endl;
}

int main() {
  auto *i_vec = new vector<int>(10);
  printVectorElements(i_vec);
  for (int i = 0; i < 10; ++i) {
    i_vec->at(i) = i + 1;
    cout << i_vec->at(i) << "; ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe (wenn die Eingabe + ist):

0; 0; 0; 0; 0; 0; 0; 0; 0; 0;
1; 2; 3; 4; 5; 6; 7; 8; 9; 10;
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C++ Function

Verwandter Artikel - C++ Pointer

Verwandter Artikel - C++ Vector