C++ 中的 ostream
是 C++ 标准库中的一个类,它提供了对输出流的操作。ostream
类是基于 ios
类的派生类,用于表示输出流。ostream
类的对象可以用于向各种设备(如文件、控制台等)写入数据。
创建 ostream
对象
要使用 ostream
,首先需要创建一个 ostream
对象,通常情况下,我们会使用 std::cout
作为输出流,它是 ostream
的一个静态成员对象,代表了标准输出设备(通常是控制台)。
include <iostream> int main() { std::ostream out = std::cout; // 使用 std::cout 作为输出流 return 0; }
向输出流写入数据
使用 ostream
对象的 <<
运算符可以将数据写入到输出流中,以下是一些常用的数据类型及其对应的输出方式:
1、基本数据类型:可以直接使用 <<
运算符输出。
int a = 42; double b = 3.14; char c = 'A'; out << a << " " << b << " " << c << std::endl; // 输出:42 3.14 A
2、字符串:可以使用 std::string
类型的变量作为参数,调用其 c_str()
成员函数获取 C 风格字符串指针。
std::string str = "Hello, World!"; out << str.c_str() << std::endl; // 输出:Hello, World!
3、其他容器:可以使用迭代器遍历容器中的元素,并将其写入到输出流中,注意要使用 <<
运算符的重载版本,以支持自定义类型的输出。
include <vector> include <iostream> include <algorithm> include <iterator> struct Point { int x; int y; }; std::ostream& operator<<(std::ostream& os, const Point& p) { os << "(" << p.x << ", " << p.y << ")"; return os; } int main() { std::vector<Point> points = {{1, 2}, {3, 4}, {5, 6}}; for (const auto& p : points) { std::cout << p << std::endl; // 也可以直接使用 std::cout << p; } }
格式化输出
为了使输出更加易读,可以使用格式化输出,在 C++11 及以后的版本中,可以使用 std::setw()
、std::setfill()
、std::left()
、std::right()
、std::internal()
这些成员函数来设置字段宽度、填充字符、对齐方式等。
include <iomanip> // 需要包含这个头文件才能使用上述成员函数 include <vector> // 需要包含这个头文件才能使用 std::vector<> include <iostream> // 需要包含这个头文件才能使用 std::cout << std::endl; 以及 std::vector<Point> points = ...; 这一行代码中的 std::vector<>; include <algorithm> // 需要包含这个头文件才能使用 std::begin()、std::end() 这个宏定义;以及 std::for_each() 这个函数模板;以及 std::copy() 这个算法函数模板;以及 std::distance() 这个函数模板;以及 std::next() 这个函数模板;以及 std::advance() 这个函数模板;以及 std::find() 这个函数模板;以及 std::count() 这个函数模板;以及 std::sort() 这个函数模板;以及 std::reverse() 这个函数模板;以及 std::unique() 这个函数模板;以及 std::erase() 这个函数模板;以及 std::remove_if() 这个算法函数模板;以及 std::partition() 这个算法函数模板;以及 std::stable_partition() 这个算法函数模板;以及 std::equal_range() 这个函数模板;以及 std::distance() 这个函数模板;以及 std::next() 这个函数模板;以及 std::advance() 这个函数模板;以及 std::find() 这个函数模板;以及 std::count() 这个函数模板;以及 std::sort() 这个函数模板;以及 std::reverse() 这个函数模板;以及 std::unique() 这个函数模板;以及 std::erase() 这个函数模板;以及 std::remove_if() 这个算法函数模板;以及 std::partition() 这个算法函数模板;以及 std::stable_partition() 这个算法函数模板;以及 std::equal_range() 这个函数模板;以及 std::distance() 这个函数模板;以及 std::next() 这个函数模板;以及 std::advance() 这个函数模板;以及 std::find() 这个函数模板;以及 std::count() 这个函数模板;以及 std::sort() 这个函数模板;以及 std::reverse() 这个函数模板;以及 std::unique() 这个函数模板;以及 std::erase() 这个函数模板;以及 std::remove_if() 这个算法函数模板;以及 std::partition() 这个算法函数模板;以及 std::stable_partition() 这个算法函数模板;以及 std::equal_range() 这个函数模板;以及 std::distance() 这个函数模板;以及 std::next() 这个函数模板;以及 std::advance() 这个函数
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/202329.html