Stream Manipulation Tricks
Custom Stream Manipulation
Creating Custom Manipulators
#include <iostream>
#include <iomanip>
// Custom manipulator function
std::ostream& highlight(std::ostream& os) {
return os << "\033[1;31m"; // Bold red text
}
std::ostream& reset(std::ostream& os) {
return os << "\033[0m"; // Reset text formatting
}
int main() {
std::cout << highlight << "LabEx C++ Tutorial" << reset << std::endl;
}
Stream State Management
Stream State Flags
Flag |
Description |
Purpose |
goodbit |
No errors |
Normal operation |
failbit |
Logical error |
Operation failed |
badbit |
Fatal error |
Stream corrupted |
Error Handling Techniques
#include <iostream>
#include <sstream>
int main() {
std::stringstream ss;
int value;
ss << "Invalid Input";
ss >> value;
if (ss.fail()) {
std::cerr << "Conversion failed!" << std::endl;
ss.clear(); // Reset error flags
}
}
Advanced Stream Redirection
flowchart TD
A[Input Stream] --> B{Redirection}
B -->|File| C[File Stream]
B -->|String| D[String Stream]
B -->|Console| E[Console Stream]
Stream Chaining and Composition
#include <iostream>
#include <sstream>
#include <iomanip>
int main() {
std::ostringstream oss;
// Complex stream manipulation
oss << std::setw(10)
<< std::setfill('0')
<< std::right
<< 42;
std::cout << "Formatted: " << oss.str() << std::endl;
}
- Use
std::ios_base::sync_with_stdio(false)
- Minimize stream buffer flushing
- Preallocate string buffers
- Use
std::move
for stream operations
Stream Composition Example
#include <iostream>
#include <sstream>
class LogFormatter {
public:
static std::string format(const std::string& message) {
std::ostringstream oss;
oss << "[LabEx] " << message;
return oss.str();
}
};
int main() {
std::cout << LogFormatter::format("Stream manipulation complete")
<< std::endl;
}
By mastering these stream manipulation techniques, developers can create more flexible and powerful I/O operations in C++.