c++11 标准模板(STL)(std::basic_ostringstream)(四)

复制代码
定义于头文件 <sstream>

|-------------------------------------------------------------------------------------------------------------------------------------------|---|-----------|
| template< class CharT, class Traits = std::char_traits<CharT> > class basic_ostringstream; | | (C++11 前) |
| template< class CharT, class Traits = std::char_traits<CharT>, class Allocator = std::allocator<CharT> > class basic_ostringstream; | | (C++11 起) |

类模板 std::basic_ostringstream 实现基于字符串的流上的输入与输出操作。它等效地存储一个 std::basic_string 的实例,并在其上进行输出操作。

在低层,该类实际上包装 std::basic_stringbuf 的未处理字符串设备到 std::basic_ostream 的高层接口中。提供到独有 std::basic_stringbuf 成员的完整接口。

亦定义对常用字符类型的二个特化:

|------------------|--------------------------------|
| 类型 | 定义 |
| ostringstream | basic_ostringstream<char> |
| wostringstream | basic_ostringstream<wchar_t> |

成员函数

交换两个字符串流

复制代码
std::basic_ostringstream::swap

|-------------------------------------------|---|-----------|
| void swap( basic_ostringstream& other ); | | (C++11 起) |

交换流与 other 的状态。

通过调用 basic_ostream<CharT, Traits>::swap(other) 和 rdbuf()->swap(*other.rdbuf()) 进行。

参数

|-------|---|---------|
| other | - | 要交换状态的流 |

返回值

(无)

调用示例

复制代码
#include <sstream>
#include <string>
#include <iostream>

int main()
{
    //3) 以 str 的副本为底层字符串设备的初始内容。
    std::string string1 = "I am a handsome programmer";
    std::basic_ostringstream<char>
    basic_ostringstream1(string1, std::ios_base::out);
    std::cout << "basic_ostringstream1: "
              << basic_ostringstream1.str() << std::endl;
    std::cout << "basic_ostringstream1 rdstate: ";
    std::cout << basic_ostringstream1.rdstate() << std::endl;

    std::string string2 = "I am a super handsome guy";
    std::basic_ostringstream<char>
    basic_ostringstream2(string2, std::ios_base::out);
    std::cout << "basic_ostringstream2: "
              << basic_ostringstream2.str() << std::endl;
    std::cout << "basic_ostringstream2 rdstate: ";
    std::cout << basic_ostringstream2.rdstate() << std::endl;
    std::cout << std::endl;

    //交换流与 other 的状态。
    //通过调用 basic_istream<CharT, Traits>::swap(other)
    //和 rdbuf()->swap(*other.rdbuf()) 进行。
    basic_ostringstream1.swap(basic_ostringstream2);
    std::cout << "after swap: " << std::endl;

    std::cout << "basic_ostringstream1: "
              << basic_ostringstream1.str() << std::endl;
    std::cout << "basic_ostringstream1 rdstate: ";
    std::cout << basic_ostringstream1.rdstate() << std::endl;

    std::cout << "basic_ostringstream2: "
              << basic_ostringstream2.str() << std::endl;
    std::cout << "basic_ostringstream2 rdstate: ";
    std::cout << basic_ostringstream2.rdstate() << std::endl;

    return 0;
}

非成员函数

特化 std::swap 算法

复制代码
std::swap(std::basic_ostringstream)

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| template< class CharT, class Traits, class Alloc > void swap( std::basic_ostringstream<CharT,Traits,Alloc>& lhs, std::basic_ostringstream<CharT,Traits,Alloc>& rhs ); |

为 std::basic_ostringstream 特化 std::swap 算法。交换 lhsrhs 的状态。等效地调用 lhs.swap(rhs) 。

参数

|----------|---|---------|
| lhs, rhs | - | 要交换状态的流 |

返回值

(无)

异常

(无)

调用示例

复制代码
#include <sstream>
#include <string>
#include <iostream>

int main()
{
    //3) 以 str 的副本为底层字符串设备的初始内容。
    std::string string1 = "I am a handsome programmer";
    std::basic_ostringstream<char>
    basic_ostringstream1(string1, std::ios_base::out);
    std::cout << "basic_ostringstream1: "
              << basic_ostringstream1.str() << std::endl;
    std::cout << "basic_ostringstream1 rdstate: ";
    std::cout << basic_ostringstream1.rdstate() << std::endl;

    std::string string2 = "I am a super handsome guy";
    std::basic_ostringstream<char>
    basic_ostringstream2(string2, std::ios_base::out);
    std::cout << "basic_ostringstream2: "
              << basic_ostringstream2.str() << std::endl;
    std::cout << "basic_ostringstream2 rdstate: ";
    std::cout << basic_ostringstream2.rdstate() << std::endl;
    std::cout << std::endl;

    //为 std::basic_ostringstream 特化 std::swap 算法。
    //交换 lhs 与 rhs 的状态。等效地调用 lhs.swap(rhs)
    std::swap(basic_ostringstream1, basic_ostringstream2);
    std::cout << "after swap: " << std::endl;

    std::cout << "basic_ostringstream1: "
              << basic_ostringstream1.str() << std::endl;
    std::cout << "basic_ostringstream1 rdstate: ";
    std::cout << basic_ostringstream1.rdstate() << std::endl;

    std::cout << "basic_ostringstream2: "
              << basic_ostringstream2.str() << std::endl;
    std::cout << "basic_ostringstream2 rdstate: ";
    std::cout << basic_ostringstream2.rdstate() << std::endl;

    return 0;
}

输出

相关推荐
鑫鑫向栄34 分钟前
[蓝桥杯]剪格子
数据结构·c++·算法·职场和发展·蓝桥杯
白总Server35 分钟前
C++语法架构解说
java·网络·c++·网络协议·架构·golang·scala
羊儿~1 小时前
P12592题解
数据结构·c++·算法
.Vcoistnt1 小时前
Codeforces Round 1028 (Div. 2)(A-D)
数据结构·c++·算法·贪心算法·动态规划
PXM的算法星球2 小时前
paoxiaomo的XCPC算法竞赛训练经验
c++·算法
孤独得猿2 小时前
高阶数据结构——并查集
数据结构·c++·经验分享·算法
一只鱼^_2 小时前
力扣第452场周赛
数据结构·c++·算法·leetcode·贪心算法·动态规划·剪枝
虾球xz2 小时前
CppCon 2014 学习:Decomposing a Problem for Parallel Execution
开发语言·c++·学习
apolloyhl2 小时前
C/C++ 面试复习笔记(2)
c语言·c++·算法·面试
不愧是你呀4 小时前
C++中单例模式详解
网络·c++·windows·单例模式