C++的IO庫以流對象爲實體。主要有三種流:ios
(1)標準輸入輸出流 spa
(2)文件輸入輸出流 code
(3)字符串輸入輸出流對象
s.eof() //流結束狀態,輸入流中已經讀全然部數據。再讀一次就會是eof爲trueblog
s.fail() //變量轉換失敗clear(ios::failbit)ip
s.bad() //ci
s.clear() //所有狀態重置爲有效字符串
容器 input
vector 源碼
string
deque
list
v.begin() v.end()
l.cbegin() l.cend()
流迭代器用來寫入流,或者從讀流對象讀數據,輸入流迭代器使用strm>>t操做,將數據寫到變量中。你看看>>操做符像不像箭頭,這個箭頭表明了數據的流向,C++做者說的。呵呵。
相同輸出流使用<<操做符,將變量的數據寫到流中。
輸入流迭代器 輸出流迭代器
istream_iterator<T> iter_begin(strm),iter_end; ostream_iterator<T> iter_begin(strm),iter_end;/
以變量爲單位。空白符將會被吃掉 以變量爲單位,空白符將會被吃掉
istreambuf_iterator<char> iter_begin(strm),iter_end; ostreambuf_iterator<char> iter_begin(strm),iter_end;
以字符爲單位,空白符將會依照一個單位處理 以字符爲單位,空白符將會依照一個單位處理
#include <iostream> #include <string> #include <sstream> #include <iterator> #include <algorithm> using namespace std; int main(int , char**) { std::string str("a b c 123 !"); cout<<str<<endl; stringstream ss(str); istreambuf_iterator<char> itrBegin(ss),itrEnd; copy(itrBegin, itrEnd, ostream_iterator<char>(cout)); return 0; }
#include <iostream> #include <fstream> #include <algorithm> #include <iterator> using namespace std; int main(int argv, char** argc) { ifstream fin("main.cpp"); //buf迭代器會獲得空白字符 istreambuf_iterator<char> itrFile(fin), endFile; //輸出迭代器只迭代一個char就能夠,不需要是buf迭代器 ostream_iterator<char> itrCout(cout); copy(itrFile, endFile, itrCout); return 0; }
#include <iostream> #include <fstream> #include <algorithm> #include <iterator> using namespace std; int main(int argv, char** argc) { ifstream fin("main.cpp"); string str; istreambuf_iterator<char> itrFileBegin(fin), itrFileEnd; copy(itrFileBegin, itrFileEnd, back_inserter(str));//把源文件內的代碼(包含字符和空格)放到字符串中 //僅僅有遇到'\0'纔會結束,而源文件裏的空格字符(' '相應的數值爲32) //,回車字符,Tab字符相應的值都不是'\0',因此都能被打印出來 cout<<str.c_str()<<endl; return 0; }
copy(iter_from_begin,iter_from_end,iter_dest_begin);
<iterator> <iterator>
inserter(strm) //v.insert istream_iterator<T> iter_begin(strm),iter_end;
back_inserter(strm) //v.push_back istreambuf_iterator<char> iter_begin(strm),iter_end;
front_inserter(strm) //v.push_front
<------------------------------------------------------ 數據 < ---------------------------------------------------
容器 流對象
vector fstream
string sstream
list deque cin cout----------------------------------------------------------> 數據 ---------------------------------------------------->
v.begin() v.end() ostream_iterator<T> iter_begin(strm),iter_end;/
l.cbegin() l.cend() ostreambuf_iterator<char> iter_begin(strm),iter_end;
copy(iter_from_begin,iter_from_end,iter_dest_begin);
演示樣例:
#include <iostream> #include <sstream> #include <string> #include <vector> #include <algorithm> #include <iterator> using namespace std; int main(int argc, char *argv[]) { int temp_int[5] = {1,2,3,4,5}; vector<int> vector_int; //array to vector copy(temp_int,temp_int+sizeof(temp_int)/sizeof(int),back_inserter(vector_int)); //vector to cout copy(vector_int.begin(),vector_int.end(),ostream_iterator<int>(cout," ")); cout<<endl; //vector to stringstream stringstream strm; copy(vector_int.begin(),vector_int.end(),ostream_iterator<int>(strm," ")); cout<<strm.str()<<endl; //stringstream to vector<string> vector<string> vector_string; copy(istream_iterator<string>(strm),istream_iterator<string>(),back_inserter(vector_string)); copy(vector_string.begin(),vector_string.end(),ostream_iterator<string>(cout," ")); cout<<endl; return 0; }輸出例如如下:
1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 請按隨意鍵繼續. . .