C++基礎::Stream
標準I/O庫類繼承體系
對應關係:
- istream,ifstream,istringstream
- ostream,ofstream,ostringstream
- iostream,fstream,stringstream
從上圖我們可以看到,stringstream
兼具istringstream
(從字串流中讀資料)ostringstream
(向字串流中寫資料)的功能(它們三者的標頭檔案均位於<sstream>),既然如此我們是不是在任何istringstream
和ostringstream
出現的地方替換為stringstream
(任何istream
和ostream
出現的地方替換為iostream
,三者的標頭檔案均位於<iostream)呢。然而事實上並沒有這麼做。
既從一個字串中讀又從中寫資料是一件古怪(且很少發生)的行為1。
std::stringstream ss;
ss << "hello world ";
// world 後要有至少有一個空格,
ss << 42;
std::string str1, str2; int i;
// 流以空格為分割,且忽略冗餘空格
ss >> str1 >> str2 >> i;
std::cout << str1 << str2 << str3 << std::endl;
流的好處
流的好處在於無論何種基本資料型別都可丟到流中,且很方便再重新取出賦值,這是字串型別所做不到的。
#include <stdlib.h>
// _itoa
// 進行windows平臺下的編譯器
std::stringstream ss;
ss << "hello world " << 42;
std::string str1, str2; int i;
ss >> str1 >> str2 >> i;
std::string s;
int i = 42;
s += "hello world ";
char arr[5];
_itoa(i, arr, 10);
s += arr;
// 較為囉嗦和複雜
good()
判斷檔案開啟是否成功:
std::ofstream ofs("./1.txt");
assert(ofs.good());
// 檔案開啟成功時,good()返回值為true
// 否則為false
返回值型別
C++ 中的 string 型別定義:
typedef basic_string<char, char_traits<char>, allocator<char> >
string;
對 string 型別的 s 而言,s.c_str():string ==》 char*
對流型別的 s 而言,s.str():stream ==》 string
References
相關文章
- [Java基礎]Stream流Java
- nodeJS基礎 Stream用法NodeJS
- C++ 基礎C++
- c++基礎C++
- node基礎(4)---Stream的用法詳解
- JAVA基礎之六-Stream(流)簡介Java
- 【C++】C++基礎知識C++
- Java基礎 | Stream流原理與用法總結Java
- C++基礎語法C++
- C++基礎 constC++
- C++基礎::stringC++
- C++基礎總結C++
- C++基礎知識C++
- Java基礎系列-Java8 Stream 簡明教程Java
- 【01】C到C++(基礎)C++
- c++基礎三(變數)C++變數
- 面試總結(C++基礎)面試C++
- C++基礎::檔案流C++
- C++基礎:: struct vs classC++Struct
- C++基礎知識整理C++
- C++基礎資料二C++
- C++基礎學習1C++
- C++基礎學習6C++
- C++基礎知識篇:C++ 運算子C++
- C++ -> Java快速學習-基礎C++Java
- c++基礎十(流程結構)C++
- (C++) queue容器基礎知識C++
- C++基礎::STL中的定理C++
- C++基礎::拾遺&&瑣碎C++
- C++基礎簡單總結C++
- C++的基礎學習5C++
- C++多執行緒基礎教程C++執行緒
- python入門(需要C++基礎)PythonC++
- 【c++基礎】菱形繼承問題C++繼承
- C++基礎知識筆記(1)筆記
- C++基礎::變數模板(variable template)C++變數
- Spark-stream基礎---sparkStreaming和Kafka整合wordCount單詞計數SparkKafka
- 基礎篇:JAVA.Stream函式,優雅的資料流操作Java函式