Erweiterte Stream-Handhabung
Stream-Manipulatoren
#include <iostream>
#include <iomanip>
int main() {
double value = 123.456789;
// Genauigkeit und Formatierung
std::cout << std::fixed << std::setprecision(2) << value << std::endl;
std::cout << std::scientific << value << std::endl;
// Breite und Ausrichtung
std::cout << std::setw(10) << std::right << value << std::endl;
return 0;
}
Allgemeine Manipulatoren
Manipulator |
Zweck |
setw() |
Feldbreite festlegen |
setprecision() |
Dezimalstellen festlegen |
fixed |
Festkomma-Darstellung |
scientific |
Wissenschaftliche Notation |
Benutzerdefinierte Stream-Operatoren
Überladen von Stream-Operatoren
#include <iostream>
class Student {
private:
std::string name;
int age;
public:
// Überladung des << Operators
friend std::ostream& operator<<(std::ostream& os, const Student& student) {
os << "Name: " << student.name << ", Alter: " << student.age;
return os;
}
// Überladung des >> Operators
friend std::istream& operator>>(std::istream& is, Student& student) {
std::cout << "Name eingeben: ";
is >> student.name;
std::cout << "Alter eingeben: ";
is >> student.age;
return is;
}
};
int main() {
Student labExStudent;
std::cin >> labExStudent;
std::cout << labExStudent << std::endl;
return 0;
}
Stream-Zustandsverwaltung
graph TD
A[Stream-Zustand] --> B{Guter Zustand}
B --> |Fehler| C[Fehlerzustand]
B --> |EOF| D[Ende der Datei]
B --> |Schlecht| E[Schlechtes Bit gesetzt]
Überprüfung des Stream-Zustands
#include <iostream>
#include <fstream>
void checkStreamState(std::ifstream& file) {
if (file.is_open()) {
if (file.good()) {
std::cout << "Stream befindet sich im guten Zustand" << std::endl;
}
if (file.eof()) {
std::cout << "Ende der Datei erreicht" << std::endl;
}
if (file.fail()) {
std::cout << "Stream-Operation fehlgeschlagen" << std::endl;
}
}
}
Konvertierung von Zeichenketten in Zahlen
#include <sstream>
#include <string>
#include <iostream>
int main() {
std::string numberStr = "42";
int number;
std::stringstream ss(numberStr);
ss >> number;
std::cout << "Konvertierte Zahl: " << number << std::endl;
// Rückkonvertierung
std::stringstream reversess;
reversess << number;
std::string convertedBack = reversess.str();
return 0;
}
Stream-Puffermanipulation
Umleiten von Streams
#include <iostream>
#include <fstream>
int main() {
// Umleitung von cout in eine Datei
std::ofstream outputFile("log.txt");
std::streambuf* originalCout = std::cout.rdbuf();
std::cout.rdbuf(outputFile.rdbuf());
std::cout << "LabEx Stream-Umleitung Beispiel" << std::endl;
// Wiederherstellung des ursprünglichen cout
std::cout.rdbuf(originalCout);
return 0;
}
Stream-Synchronisation
Synchronisationsmethode |
Beschreibung |
sync_with_stdio() |
Synchronisieren von C++ Streams mit C Streams |
tie() |
Ausgabe-Stream mit Eingabe-Stream verknüpfen |
Leistungssteigerung
Effiziente Stream-Handhabung
#include <iostream>
#include <vector>
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
// Effizientere Eingabe-/Ausgabe-Operationen
std::vector<int> numbers;
int num;
while (std::cin >> num) {
numbers.push_back(num);
}
return 0;
}
Wichtige Erkenntnisse
- Beherrschen Sie erweiterte Stream-Manipulationstechniken
- Verstehen Sie die Stream-Zustandsverwaltung
- Implementieren Sie benutzerdefinierte Stream-Operatoren
- Optimieren Sie die Stream-Leistung
- Entdecken Sie erweiterte Stream-Handhabungsstrategien von LabEx