Vektoren Flashcards

1
Q

Was macht ein Vektor?

A

Vektoren speichern gleichartige Daten.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Was ist der erste Schritt beim Schreiben eines Programms, um Vektoren überhaupt erst verwenden zu können?

A
Die Vektorenbibliothek muss inkludiert werden, sprich:
#𝚒𝚗𝚌𝚕𝚞𝚍𝚎 .
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Wie ist ein Vektor aufgebaut, d.h. aus welchen Elementen besteht ein Vektor?

A

Als Beispiel:
𝚜𝚝𝚍::𝚟𝚎𝚌𝚝𝚘𝚛 𝚜𝚎𝚟𝚎𝚗𝚏𝚒𝚟𝚎𝚜(𝟽, 𝟻);, wobei…

… 𝚜𝚝𝚍::𝚟𝚎𝚌𝚝𝚘𝚛 der Aufruf des Vektors ist;
… der Typ der Elemente des Vektors ist;
… 𝚜𝚎𝚟𝚎𝚗𝚏𝚒𝚟𝚎𝚜 der Name des Vektors ist;
… 𝟽 die Anzahl Elemente des Vektors ist;
… 𝟻 der Initialwert der Elemente des Vektors ist.

Folglich wird mit diesem Vektor sieben mal eine “5” ausgegeben.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Sei 𝚟𝚎𝚌 ein Vektor mit 𝚃-Elementen und 𝚎𝚡𝚙 ein 𝚒𝚗𝚝-Ausdruck mit Wert i ≥ 0.
Was für ein Ausdruck ist 𝚟𝚎𝚌[𝚎𝚡𝚙]?

A

Ein L-Wert vom Typ 𝚃, der sich auf das i-te Element von 𝚟𝚎𝚌 bezieht.
Achtung: Die Zählung von i beginnt ab 0!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Sei 𝚟𝚎𝚌[𝚎𝚡𝚙] ein Vektor. Wie wird ein Wert i von 𝚎𝚡𝚙 genannt?

A

Index.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Wie wird ein Vektor gespeichert?

A

Ein Vektor 𝚟𝚎𝚌 wird im Speicherband an einer Adresse p gespeichert und benötigt dort einen Speicherplatz von s Zellen (s entspricht dem Speicherbedarfs des Vektortyps 𝚃, z.B. benötigen 𝚒𝚗𝚝-Typen weniger Speicher als 𝚌𝚑𝚊𝚛-Typen).
Diese s Zellen speichern dann den ersten Index vom Vektor 𝚟𝚎𝚌.
Um an die Adresse von 𝚟𝚎𝚌[i] zu gelangen, muss man folglich p + s * i rechnen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Wie werden folgende Vektoren initialisiert?

(1) 𝚜𝚝𝚍::𝚟𝚎𝚌𝚝𝚘𝚛 𝚟𝚎𝚌(𝟻);
(2) 𝚜𝚝𝚍::𝚟𝚎𝚌𝚝𝚘𝚛 𝚟𝚎𝚌(𝟻, 𝟸);
(3) 𝚜𝚝𝚍::𝚟𝚎𝚌𝚝𝚘𝚛 𝚟𝚎𝚌{𝟺, 𝟹, 𝟻, 𝟸, 𝟷};
(4) 𝚜𝚝𝚍::𝚟𝚎𝚌𝚝𝚘𝚛 𝚟𝚎𝚌;

A

(1) 𝚜𝚝𝚍::𝚟𝚎𝚌𝚝𝚘𝚛 𝚟𝚎𝚌(𝟻);
Die 5 Elemente werden mit 0 initialisiert.

(2) 𝚜𝚝𝚍::𝚟𝚎𝚌𝚝𝚘𝚛 𝚟𝚎𝚌(𝟻, 𝟸);
Die 5 Elemente werden mit 2 initialisiert.

(3) 𝚜𝚝𝚍::𝚟𝚎𝚌𝚝𝚘𝚛 𝚟𝚎𝚌{𝟺, 𝟹, 𝟻, 𝟸, 𝟷};
Die 5 Elemente werden mit einer Liste initialisiert.

(4) 𝚜𝚝𝚍::𝚟𝚎𝚌𝚝𝚘𝚛 𝚟𝚎𝚌;
Ein leerer Vektor wird initialisiert.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Betrachte folgenden Programmausschnitt. Wo liegt der Fehler und was passiert?

𝚜𝚝𝚍::𝚟𝚎𝚌𝚝𝚘𝚛 𝚟𝚎𝚌(𝟷0);
𝚏𝚘𝚛 (𝚞𝚗𝚜𝚒𝚐𝚗𝚎𝚍 𝚒𝚗𝚝 𝚒 = 0; 𝚒 <= 𝟷0; ++𝚒)
𝚟𝚎𝚌[𝚒] = 𝟹0;

A

Der Vektor hat aufgrund seiner Grösse von 10 nur 10 Elemente, die bei Null beginnen, also 0 bis 9.
In der 𝚏𝚘𝚛-Schleife wird jedoch auf den Index 10 zugegriffen, was nicht möglich ist. Es kommt somit zu einem Laufzeit-Fehler und zu undefiniertem Verhalten.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Was ist bei der Verwendung von Indexoperatoren [] sehr wichtig, zu beachten?

A

Bei der Verwendung eines Indexoperators auf einem Vektor ist es die alleinige Verantwortung des Programmierers, die Gültigkeit aller Elementzugriffe zu prüfen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Wie initialisiert man eine Matrix, d.h. einen mehrdimensionalen Vektor, in C++?

A

Um eine Matrix zu initialisieren verwendet man Vektoren von Vektoren (von Vektoren von…). So wird folglich an jedem Speicherpunkt des Vektors n ein weiterer Vektor gespeichert m gespeichert und man erhält eine m×n-Matrix.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Betrachte folgenden Vektor (bzw. Matrix):

𝚜𝚝𝚍::𝚟𝚎𝚌𝚝𝚘𝚛> 𝚖 = {
  {"𝚉𝙷", "𝙱𝙴", "𝙻𝚄", "𝙱𝚂", "𝙶𝙴"}, 
  {"𝙵𝚁", "𝚅𝙳", "𝚅𝚂", "𝙽𝙴", "𝙹𝚄"}, 
  {"𝙰𝚁", "𝙰𝙸", "𝙾𝚆", "𝙸𝚆", "𝚉𝙶"} 
};

Wie viele Zeilen und Spalten hat diese Matrix?
Welcher Kanton wird an der Stelle 𝚖[𝟷][𝟸] ausgelesen?

A

Diese Matrix hat 3 Spalten und 5 Zeilen, dies kann man ganz einfach an den Listen ablesen (3 Listen à 5 Elementen).

Die Stelle 𝚖[𝟷][𝟸] wird zu 𝚅𝚂 ausgewertet.
(Beachte, dass die Nummerierung bei 0 beginnt.)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Wie würde man eine beliebige a×b-Matrix initialisieren, bei der alle Einträge zu “1” ausgewertet werden sollen?

A

𝚞𝚗𝚜𝚒𝚐𝚗𝚎𝚍 𝚒𝚗𝚝 𝚊 = …; 𝚞𝚗𝚜𝚒𝚐𝚗𝚎𝚍 𝚒𝚗𝚝 𝚋 = …;
𝚜𝚝𝚍::𝚟𝚎𝚌𝚝𝚘𝚛>
𝚖(𝚊, 𝚜𝚝𝚍::𝚟𝚎𝚌𝚝𝚘𝚛(𝚋, 𝟷));

Wobei 𝚖 ein Vektor der Länge a ist, dessen Elemente Vektoren der Länge b sind.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Wie umgeht man das Problem, dass für beliebig grosse Matrizen die Initialisierung sehr lange werden kann?

A

Man arbeitet mit Typ-Aliassen, z.B.:
𝚞𝚜𝚒𝚗𝚐 𝚒𝚖𝚊𝚝𝚛𝚒𝚡 = 𝚜𝚝𝚍::𝚟𝚎𝚌𝚝𝚘𝚛>;

Danach kann man nur noch mit dem Alias arbeiten, z.B.:
𝚟𝚘𝚒𝚍 𝚙𝚛𝚒𝚗𝚝(𝚌𝚘𝚗𝚜𝚝 𝚒𝚖𝚊𝚝𝚛𝚒𝚡& 𝚖, 𝚜𝚝𝚍::𝚘𝚜𝚝𝚛𝚎𝚊𝚖& 𝚘𝚞𝚝);
𝚒𝚗𝚝 𝚖𝚊𝚒𝚗() {
𝚒𝚖𝚊𝚝𝚛𝚒𝚡 𝚖 = …;
𝚙𝚛𝚒𝚗𝚝(𝚖, 𝚜𝚝𝚍::𝚌𝚘𝚞𝚝);
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly