C++学习笔记系列三
生活随笔
收集整理的這篇文章主要介紹了
C++学习笔记系列三
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1、new/delete擴(kuò)展
2、C++的輸出輸入流
4、文件輸入輸出流 <fstream>
數(shù)組: ?vector ---> 動(dòng)態(tài)數(shù)組,可以動(dòng)態(tài)擴(kuò)容。 方法是: 1、先根據(jù)當(dāng)前容量capacity擴(kuò)展空間,開辟出 2 * capacity 的空間。 2、再把原來空間的元素全部復(fù)制到新空間里面去。 3 、在在末尾添加新元素 4、最后回收原來的空間。
vector <int> vex; vec.size() --->當(dāng)前數(shù)組存放了的大小 vec.push_back() --->向數(shù)組里方數(shù)據(jù)。 vec.capacity(); ? -->容量-->可以存放的個(gè)數(shù) vec.reserve(100); -->設(shè)定最大值,先開空間,推薦這樣使用。
ifstream 文件輸入流要求文件是存在的。 eg:
ifstream ?ifs("a.txt") string word; ifs>>word ? ?//默認(rèn)情況下 >> 是以空格作為分隔符的 getline(ifs,line) ? ? //可以讀取一行
vextor<string> lines; lines.push_back(line); ?--->將文件內(nèi)容,放到vector 容器里面了。
---> ?ifs.close(); ? ? ? //關(guān)閉文件
ofstream ofs(“a.out”) //文件輸入流要求文件是存在的,而輸出流,不要求,沒有則創(chuàng)建一個(gè)。
輸入流有些函數(shù)是 以g結(jié)尾的,輸入流以p結(jié)尾的。
文件模式 ios::in? ? 打開文件做讀操作 ios::out? ?打開文件做寫操作,會(huì)刪除原有數(shù)據(jù) ios::app? ?在每次寫之前找到文件尾 ios::trunc 打開文件時(shí)清空已存在的文件流 ios::ate? ?打開文件后立即定位到文件末尾 --->正對輸入流 ios::binary 以二進(jìn)制模式進(jìn)行IO操作
- 使用new表達(dá)式時(shí)發(fā)生的三個(gè)步驟: ? ? ? ? ? ? ? ? ? ? ? ? ? ??
- 調(diào)用名為operator new的標(biāo)準(zhǔn)庫函數(shù),分配足夠大的原始的未類型化的內(nèi)存,以保存指定類型的一個(gè)對象
- 運(yùn)行該類型的一個(gè)構(gòu)造函數(shù)去初始化對象
- 返回指向新分配并構(gòu)造的構(gòu)造函數(shù)對象的指針 使用
- delete表達(dá)式時(shí),發(fā)生的步驟:
- 調(diào)用對象的析構(gòu)函數(shù)
- 調(diào)用名為operator delete的標(biāo)準(zhǔn)庫函數(shù)釋放該對象所用的內(nèi)存
2、C++的輸出輸入流
- 標(biāo)準(zhǔn)輸入輸出流:cin ?和 ?cout 對象是有緩沖區(qū)的,對于cin可以通過函數(shù)cin . ignore ?清空cin 的緩沖區(qū)。有兩個(gè)參數(shù),第一個(gè)是要忽略的大小,第二個(gè)是結(jié)束符,如果要清空整個(gè)流的緩沖區(qū),則一般使用 ?ignore(std::numeric_limits<std::streamsize>::max(), '\n')
- Ctrl + d 結(jié)束輸入,Ctrl + c ?關(guān)閉程序。?
- 1、標(biāo)準(zhǔn)輸入輸出流 -- 頭文件<iostream> cin/cout/cerr-- printf/scanf
- 2. 文件輸入輸出流 -- 頭文件<fstream> ifstream/ofstream/fstream fprintf? ?fscanf? fopen fwrite fclose
-
- ifstream / fstream ?要求文件存在,(要輸入),通過 tellg( )獲取當(dāng)前游標(biāo)位置,seekg()偏移游標(biāo)位置。除了getline 獲取一行外,當(dāng)文件較大時(shí),也可以用 read( ) 要獲取多長數(shù)據(jù)(字節(jié)數(shù))
- ofstream ?不要求文件必須存在,否則及創(chuàng)建。通過 tellp( )獲取當(dāng)前游標(biāo)位置,seekp()偏移游標(biāo)位置。
- 對于文件流,在操作完成之后,要close關(guān)閉。
-
- 打開方式: ?in/ate?
- out/trunk/app
- binary
- 3. 字符串流 -- 頭文件<sstream> istringstream/ostringstream/stringstream sscanf? sprintf
-
- 字符流不用關(guān)閉
- istringstream輸入流,把字符串類型轉(zhuǎn)成其他類型--->可以用來讀取配置文件
- ostringstream輸出流,把其他類型轉(zhuǎn)成字符串類型 ?--->將整形數(shù)據(jù)準(zhǔn)換成字符串(多用)。
- stringstream,相互轉(zhuǎn)換都可以。
- badbit? ? ?系統(tǒng)級(jí)故障,不可恢復(fù) ? ?--->? bad( )
- failbit 可以恢復(fù)的錯(cuò)誤 ? ? ? ? ? ? ? ? ? ----> ?fail( )
- eofbit? ? ?碰到了文件結(jié)尾 ? ? ? ? ? ? ?? ---->eof( )
- goodbit 有效狀態(tài) ? ? ? ? ? ? ? ? ? ? ? ?---->good( )
- 查詢流的狀態(tài)
- cin.bad()
- cin.fail()
- cin.eof()
- cin.good()
- 重置狀態(tài)? cin.clear()
4、文件輸入輸出流 <fstream>
- 第一個(gè)容器 vector -->在 std 里面,
數(shù)組: ?vector ---> 動(dòng)態(tài)數(shù)組,可以動(dòng)態(tài)擴(kuò)容。 方法是: 1、先根據(jù)當(dāng)前容量capacity擴(kuò)展空間,開辟出 2 * capacity 的空間。 2、再把原來空間的元素全部復(fù)制到新空間里面去。 3 、在在末尾添加新元素 4、最后回收原來的空間。
vector <int> vex; vec.size() --->當(dāng)前數(shù)組存放了的大小 vec.push_back() --->向數(shù)組里方數(shù)據(jù)。 vec.capacity(); ? -->容量-->可以存放的個(gè)數(shù) vec.reserve(100); -->設(shè)定最大值,先開空間,推薦這樣使用。
- ifstream ? 文件輸入流類型。
ifstream 文件輸入流要求文件是存在的。 eg:
- string word;
- while(ifs >> word) //因?yàn)閣ord是一個(gè)字符串,故輸入也默認(rèn)情況下以空格作為分隔符。
ifstream ?ifs("a.txt") string word; ifs>>word ? ?//默認(rèn)情況下 >> 是以空格作為分隔符的 getline(ifs,line) ? ? //可以讀取一行
vextor<string> lines; lines.push_back(line); ?--->將文件內(nèi)容,放到vector 容器里面了。
---> ?ifs.close(); ? ? ? //關(guān)閉文件
- 輸出流,ofstream ?
ofstream ofs(“a.out”) //文件輸入流要求文件是存在的,而輸出流,不要求,沒有則創(chuàng)建一個(gè)。
輸入流有些函數(shù)是 以g結(jié)尾的,輸入流以p結(jié)尾的。
文件模式 ios::in? ? 打開文件做讀操作 ios::out? ?打開文件做寫操作,會(huì)刪除原有數(shù)據(jù) ios::app? ?在每次寫之前找到文件尾 ios::trunc 打開文件時(shí)清空已存在的文件流 ios::ate? ?打開文件后立即定位到文件末尾 --->正對輸入流 ios::binary 以二進(jìn)制模式進(jìn)行IO操作
- 針對文件輸入輸出流來說,也需要文件存在
- 字符串流stringstream ?
總結(jié)
以上是生活随笔為你收集整理的C++学习笔记系列三的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis命令详解:Hashs
- 下一篇: extern 在c/c++ 中的作用