c++: vector as new type in -std=c++11

Eine sichere Alternative zum Array!

#include <vector>
std::vector <int> messungen = { 12, 10, 11, 12, 10 };
std::vector <string> klasse_1b = { "eva", "tim", "lin", "noe" };
std::vecrot <Class> token_table = { "n", 5, "+", 2, "*", 4 };


Wertzuweisung

messungen[1] = 11;
token_table[2] = { "*", 3 }

 

Vektor per Referenz übergeben
Damit nicht alle Werte des Vektors übergeben werden müssen, wird nur die Adresse übergeben (siehe Pointer).

void print( const vektor <int>& messungen){
.   // code
}

Zur Referenzübergabe gehört sowohl das & (Adresse mitgeben).

Mit 0 oder leeren Strings initialisieren

std::vector <int> messungen( 5 );
std::vector <string> klasse_1b( 4 );

Achtung: geht nur, wenn man mit -std=c++11 kompiliert.

for eines Vektors

for (int i : messungen){
.    (if i = 5 ) {
.        //
.     }
}

Das verkürzte For für einen Vektor gibt zu Beginn den Datentyp an und nach dem Doppelpunkt die Länge des Vekorts. Dann geht das For durch jedes Elements des Vektors.

for eines Vektors aus einem Klassen-Datentyp

for (Token t: token_table){
.    (if t.nummer == 5) {
.        //
.     }
}

Wieder zuerst der Datentyp (Token) und dann den Vektor.
Bei der interenen Auswertung, muss gesagt werden, auf welchen Variabelntyp der Klasse sich die Auswertung bezieht. (Bei der Klasse Token hat jeder Index zwei Variablen: string operation und int nummer.)

 

Funktionen für Vektorbearbeitung

int anzahl = messungen.size();
messungen.sort();


Daten in Vector einlesen

vector <int> data;
int current_element;

while ( cin ){
    cin >> current_element
     data.push_back ( current_element );
}

– Die Funktion push_back() hängt neue Daten hinten an.
– Sie vergrössert die Vektorgrösse damit immer um 1

 

stream bearbeiten

token
Aufteilen des Streams in Pakete.
Die Paketunterteilung erfolgt über intelligente Funktionen.
Die Token an sich haben noch keine Bedeutung, es sind uninterpretierte Pakete.

parsen
Nennt man den Vorgang, der den Paketen (Token) eine Bedeutung zuteilt.
Es ist die Interpretation der Pakete.


Mit den Pipe-Operatoren < und > können streams übergeben werden.
Dies kann als Parameter für ein anderes Programm oder in eine Datei sein.

Pipe

Eine Pipe ist ein Datenstrom zwischen zwei Prozessen.
Bzw. es ist der Ausgang der Daten des ersten Programmes, der Abgefangen wird.

programm1 >> daten >> programm2
programm1 | ausgabe.txt // Die daten werden in ausgabe.txt geschrieben

Das Ergebnis eines Programms wird als Eingabe eines anderen Programms verwendet

| <optionen
Programm 1 übergibt Datenstrom direkt Programm 2

c++: einlesen mit >>

in = von aussen IN eine Datei (ablegen)
out = von Datei nach aussen geben

#include <iostream>
#include <string>

Über die Konsole kann wortweise über cin eingelesen werden.

std::cin >> wort1;   // ablegen in variable

Will man über die Konsole mehrere Wörter eingeben, so braucht man mehrere Variablen, zum Speichern. Der Datentyp von Eingabe und Variable müssen stimmen.

std::string name;
int alter;

std::cout << "Eingabe Name und Alter \n";

std::cin >> name >> alter

 

Stream ablegen

string datei_name = {"data.txt"};
ifstream stream_a {datei_name};
cout << "Name des Files angeben"; 
string datei_1;
cin >> datei_1 
ifstream stream1 {datei_1}


Einlesen bis

std::string current = "";
std::string end = ".";

// 1.Variante
while ( std::cin >> current ) {
  if (current == end){
      // do action;    
  }
}

Im While wird wortweise eingelesen und das Wort in den String current abgelegt.
Sobald ein spezifisches Wort erscheint, wird eine bestimmte Anweisung erteilt.

Fehlerbehandlung

if (!cin ) {
  error(" Einlesen funtkonierte nicht \n");
}
else {
     do something;
}

binär, hex, ascii

Info
In Python wird vieles per string weitergegeben. Um die Stringwerte zu verstehen,  hier ein kleiner Überblick:
–  „0x3“ entsprechen 3 Bytes (Ascii)
–  „\x3“ enrspricht einem Byte (Binärdatei)
– „\A3“ entspricht einem Byte (Binärdatei)

Binär einlesen
f = open( „../../edid.bin“ , „rb“ )
edid = f.read()                              ‚\xA1 \x10 \xFF 0\x32‘ == 4 Bytes

Wichtige Funktionen
Achtung !!                                
Wandeln Binärzahlen in ASCII !!
bin_zahl = bin(4)                       ‚0b100‘ == 5 Bytes
hex_zahl = hex(12)                  ‚0xc“ == 3 Bytes (Ascii)
edid = hex(3) + edid                „0x3 \xA1 \x10 “ == 3 + 2 = 5 Bytes