定义于头文件 <sstream>
template< class CharT, | (C++11 前) | |
template< class CharT, | (C++11 起) |
类模板 std::basic_istringstream
实现基于字符串的流上的输入与输出操作。它等效地存储一个 std::basic_string 的实例,并在其上进行输入操作。
在低层,该类实际上包装 std::basic_stringbuf 的未处理字符串设备到 std::basic_istream 的高层接口中。提供到独有 std::basic_stringbuf
成员的完整接口。
亦定义对于常用字符类型的二个特化:
类型 | 定义 |
istringstream | basic_istringstream<char> |
wistringstream | basic_istringstream<wchar_t> |
成员函数
移动字符串流
std::basic_istringstream::operator=
basic_istringstream& operator=( basic_istringstream&& other ); | (C++11 起) |
移动赋值字符串流 other
给 *this
,等效的移动赋值 std::basic_istream 基类和关联的 std::basic_stringbuf 。
注意,基类移动赋值交换 *this 与 other
间的所有流状态变量(除了 rdbuf )。
参数
other | - | 移动来源的字符串流 |
返回值
*this
调用示例
#include <sstream>
#include <string>
#include <iostream>
int main()
{
//3) 以 str 的副本为底层字符串设备的初始内容。
std::string string1 = "I am a handsome programmer";
std::basic_istringstream<char> basic_istringstream1(string1, std::ios_base::in);
std::cout << "basic_istringstream1: " << basic_istringstream1.rdbuf() << std::endl;
std::cout << "basic_istringstream1 rdstate: ";
std::cout << basic_istringstream1.rdstate() << std::endl;
basic_istringstream1.setstate(std::ios_base::failbit);
std::cout << "basic_istringstream1 rdstate: ";
std::cout << basic_istringstream1.rdstate() << std::endl;
//注意,基类移动赋值交换 *this 与 other 间的所有流状态变量(除了 rdbuf )。
std::basic_istringstream<char> basic_istringstream2 = std::move(basic_istringstream1);
std::cout << "basic_istringstream2 rdstate: ";
std::cout << basic_istringstream2.rdstate() << std::endl;
basic_istringstream2.setstate(std::ios_base::badbit);
std::cout << "basic_istringstream2 rdstate: ";
std::cout << basic_istringstream2.rdstate() << std::endl;
return 0;
}
输出
交换两个字符串流
std::basic_istringstream::swap
void swap( basic_istringstream& other ); | (C++11 起) |
交换流与 other
的状态。
通过调用 basic_istream<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_istringstream<char> basic_istringstream1(string1, std::ios_base::in);
std::cout << "basic_istringstream1: " << basic_istringstream1.rdbuf() << std::endl;
std::cout << "basic_istringstream1 rdstate: ";
std::cout << basic_istringstream1.rdstate() << std::endl;
std::string string2 = "I am a super handsome guy";
std::basic_istringstream<char> basic_istringstream2(string2, std::ios_base::in);
std::cout << "basic_istringstream2: " << basic_istringstream2.rdbuf() << std::endl;
std::cout << "basic_istringstream2 rdstate: ";
std::cout << basic_istringstream2.rdstate() << std::endl;
std::cout << std::endl;
//交换流与 other 的状态。
//通过调用 basic_istream<CharT, Traits>::swap(other)
//和 rdbuf()->swap(*other.rdbuf()) 进行。
basic_istringstream1.swap(basic_istringstream2);
std::cout << "after swap: " << std::endl;
basic_istringstream1.seekg(std::ios_base::beg);
std::cout << "basic_istringstream1: " << basic_istringstream1.rdbuf() << std::endl;
std::cout << "basic_istringstream1 rdstate: ";
std::cout << basic_istringstream1.rdstate() << std::endl;
basic_istringstream2.seekg(std::ios_base::beg);
std::cout << "basic_istringstream2: " << basic_istringstream2.rdbuf() << std::endl;
std::cout << "basic_istringstream2 rdstate: ";
std::cout << basic_istringstream2.rdstate() << std::endl;
return 0;
}
输出