C ++, brauchen Sie Hilfe, um einige Konstrukteure und Funktionen in einer Vektorklasse mit Zeigern zu verstehen

StackOverflow https://stackoverflow.com/questions/5833226

Frage

Grüße alle;

Ich muss eine C ++ - Klassenbibliothek entwickeln, die eine Sammlung numerischer Techniken für wissenschaftliches Computing umfasst. Die Bibliothek sollte die Vektorklasse (unter Verwendung von Zeigern) mit einigen grundlegenden Funktionen implementieren, die in einer Header -Datei "vector.h" angegeben sind.

#ifndef VECTOR_H
#define VECTOR_H

template <class T>
class CVector {
private:
    int nn; //size of array
    T *v;   //pointer to array of data

public:

    //Default constractor
   CVector();

    //zero based array
    CVector(int n);

    //initialize to constant of value a
    CVector(int n, const T &a);

    //initialize to array a
    CVector(int n, const T *a);

    //copy constractor
    CVector(const CVector &rhs);

    //assignment
    CVector & operator=(const CVector &rhs);

    //i'th element
    inline T & operator[](const int i);

    inline const T & operator[](const int i) const;

    inline int size() const;

    //resize (contents not preserved)
    void resize(int newn);

    //resize and assign a constant value
    void assign(int newn, const T &a);

    //deconstractor
    ~CVector();

};

#endif  /* VECTOR_H */

Ich bin ein Anfänger in C ++ und habe einige Verwirrung, um einige Konstrukteure und Funktionen im obigen Code zu verstehen.

Meine Fragen sind:

1- Was ist das Konzept des folgenden Konstruktors?

    //initialize to array a
    CVector(int n, const T *a);

Ich meine, wie man einen Vektor in ein Array A initialisiert kann?

2- Was ist der Unterschied zwischen dem Kopierkonstruktor und der Zuordnung?

    //copy constractor
    CVector(const CVector &rhs);

    //assignment
    CVector & operator=(const CVector &rhs);

3- Ich weiß, dass diese Funktion das ITH-Element des Vektors zurückgibt:

    //i'th element
    inline T & operator[](const int i);

Aber was ist der Unterschied zwischen ihm und diesem:

    inline const T & operator[](const int i) const;

Ich muss das Konzept verstehen, um zu wissen, wie man sie in der .CPP -Datei implementiert und wie man sie in meinem Haupt anruft. Ich werde froh sein, wenn du mir hilfst.

Mit freundlichen Grüßen;

War es hilfreich?

Lösung

Q1: Dieser Konstruktor kann verwendet werden, um den Vektor mit dem Inhalt der N -Elemente des Arrays zu füllen, die mit a beginnen.

Zum Beispiel:

   float a[42] = { 31, 41, 59 };
   CVector<float> v( 3, a );

F2: Der erste ist ein Kopierkonstruktor, der zweite ist ein Zuordnungsoperator. Der Kopierkonstruktor wird verwendet, um Werte in einen Funktionsparameter zu kopieren, einen Wert aus einer Funktion zurückzugeben oder eine Variable zu initialisieren.

Zum Beispiel wird der Kopierkonstruktor für diese verwendet:

CVector<float> foo( CVector<float> v ) { ... }

...
CVector<float> v1;
CVector<float> v2 = foo( v1 ); // Copy constructor used to pass in v1, and to return v2
CVector<float> v3 = v1; // Copy constructor used to copy v1 to v2.

Und die Zuordnung wird dafür verwendet:

CVector<float> v4;
v4 = v1;

Q3. Der erste kann auf der linken Seite einer Aufgabe verwendet werden. Die const -Version wird verwendet, wenn sie auf ein Const -Objekt angewendet werden.

void bar( const float & fval ) { ... }
...
CVector<float> v1( 3, a );
v1[0] = 42;   // Non-const operator[]

const CVector<float> v2 = v1; 
float value = v2[0];  // Const operator[]
bar( v2[0] ); // Const operator[]

Andere Tipps

1) Stellen Sie Ihre Mitglieder auf: v = new T[n]; nn = n;und kopieren Sie die Elemente: for (int i = 0; i != n; ++i) v[i] = a[i];

2) Die Kopiersignierung ist, wenn Sie bereits ein Objekt haben und ihm einen anderen Wert zuweisen möchten. Der Kopierkonstruktor ist, wenn Sie ein neues Objekt mit Werten aus einem vorhandenen erstellen möchten.

3) In C ++ gibt es ein Konzept der CONT -Funktionen: Wenn Sie die Funktion auf einem Const -Objekt aufrufen; sagen: CVector<int> const& x = ...; x[3] = 3; Wird nicht funktionieren, da seitdem x ist const. Aber damit dies nicht funktioniert, die operator[] muss a zurückgeben const & an Ihre Interna.
Zu Ihrer Information: Wenn x ist unkonstant, die Art von x[3] ist T & Weil die nicht konstante Version von operator [] wird genutzt. Wenn x ist konstant jedoch die Art von x[3] ist const T & weil const Version von operator [] wird genutzt.

OK, ich bin kein C ++ - Guru, also hoffentlich wird jemand, der ein bisschen kompetenter ist, eingreift ... aber hier ist mein $ 0,02 zu diesem Thema.

  1. Iterieren Sie über das Array und geben Sie jedem Element dem Vektor hinzu. Ich gehe davon aus, dass n die Anzahl der Elemente im Array ist?

  2. Der Unterschied zwischen dem Kopierkonstruktor und der Zuordnung ist wahrscheinlich semantisch. Sie haben den gleichen Effekt auf die interne Struktur des Vektors, können jedoch in verschiedenen Situationen verwendet werden.

  3. Dies ist nur eine Vermutung, aber ich denke, dass die Veränderlichkeit der Unterschied ist. Die zweite Funktion gibt ein unveränderliches T zurück, was bedeutet, dass sie nicht geändert werden kann. Die erste Funktion gibt einen veränderlichen (veränderlichen) T.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top