日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

《C++STL基础及应用》读书笔记

發(fā)布時(shí)間:2025/7/14 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《C++STL基础及应用》读书笔记 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、五種迭代器。

輸入迭代器重載 *、== 、!= 、前置++、后置++運(yùn)算符。STL提供的主要輸入迭代器是 istream_iterator 。

它有兩種構(gòu)造函數(shù):

istream_iterator() :創(chuàng)建一個(gè)流結(jié)束的迭代器

istream_iterator(istream& ):參數(shù)是輸入流,含義是從輸入流中讀數(shù)據(jù),當(dāng)遇到流結(jié)束符時(shí)停止。

#include <iostream>#include <iterator>using namespace std;int main(){cout<<"Please Input(int): "<<endl;istream_iterator<int> a(cin);istream_iterator<int> b;while(1){cout<<*a<<endl;a++;if(a == b){cout<<"break"<<endl;break;}}}


輸出迭代器:

輸出迭代器重載 *、=、前置++、后置++運(yùn)算符。STL提供的主要輸入迭代器是 ostream_iterator 。

它有兩種構(gòu)造函數(shù):

ostream_iterator(ostream& ) :創(chuàng)建一個(gè)流輸出迭代器,用來(lái)迭代out輸出流。

ostream_iterator(ostream& ,const char* delim):同上,只是輸出的數(shù)據(jù)之間用 delim 字符串分隔。

#include <iostream>#include <iterator>using namespace std;int main(){ostream_iterator<int> ostream_it(cout,"\t");for(int i = 0;i < 5; i++){*ostream_it = i;ostream_it++;}return 0;}

?

前向迭代器:包含了輸入和輸出迭代器兩者的所有功能,加上還可以多次解析一個(gè)迭代器指定的位置,因此可以對(duì)一個(gè)值進(jìn)行多次讀寫(xiě)。顧名思義,前向迭代器只能向前移動(dòng),但是STL本身并沒(méi)有為專(zhuān)為前向迭代器預(yù)定義的迭代器。

雙向迭代器:包含了前向迭代器的所有功能,另外它還可以利用自減操作符向后移動(dòng)一個(gè)位置。例如 list 容器需要的就是雙向迭代器。

隨機(jī)訪問(wèn)迭代器:具有雙向迭代器的所有功能,再加上一個(gè)指針?biāo)械墓δ堋0ㄊ褂貌僮鞣鹢perate[]進(jìn)行索引,加某個(gè)整數(shù)值到一個(gè)指針就可以向前或向后移動(dòng)若干位置,或者使用比較運(yùn)算符在迭代器之間進(jìn)行比較。比如 vector 容器需要的就是該類(lèi)迭代器。

在一切情況下,都可以使用需求最細(xì)的隨機(jī)訪問(wèn)迭代器,但過(guò)多的需求會(huì)降低它的效率。所以實(shí)際編程時(shí)應(yīng)該選擇正好合適的iterator以期得到最高的效率。

?

文件讀寫(xiě):無(wú)論讀寫(xiě),文件不存在時(shí)都不會(huì)報(bào)異常。如果文件不存在,讀時(shí)數(shù)據(jù)為空,寫(xiě)時(shí)創(chuàng)建新文件。

文件讀取:

#include <iostream>#include <fstream>using namespace std;int main(){//write file:string filename = "hello.cpp";ofstream fout;fout.open(filename.c_str());//ofstream fout(filename.c_str(),ios::app); //使用構(gòu)造函數(shù),可以判斷文件是否存在。如果用構(gòu)造函數(shù)還是open(),文件不存在時(shí),都可以自動(dòng)創(chuàng)建。//if(!fout)//{// cout<<"file not found!create a new file."<<endl;//}fout<<"Key"<<"\t"<<"Value"<<endl;
fout.close();
//read file: ifstream fin(filename.c_str());string str;while(getline(fin,str)) //按行讀取(以\n為間隔符)。也可以 while(fin>>str) 這是以空格間隔符讀取
    {cout
<<str<<endl;}
    fin.close();
return 0;}

?

?二進(jìn)制文件讀寫(xiě):

#include <iostream>#include <fstream>using namespace std;struct User{int id;char name[20];};int main(){User user1={1,"yugd"};User user2;string filename = "test.dfd";ofstream ofs(filename.c_str());ofs.write((const char*)&user1,sizeof(User));ofs.close();ifstream ifs(filename.c_str());ifs.read((char*)&user2,sizeof(User));cout<<"id: "<<user2.id<<"\tname: "<<user2.name<<endl;ifs.close();return 0;}

?

輸入輸出流緩沖:

#include <iostream>#include <fstream>using namespace std;int main(){string filename = "test.cpp";ifstream ifs(filename.c_str());cout<<ifs.rdbuf();
ifs.close();
return 0;}


定位輸入輸出流:

?

函數(shù)對(duì)象:

必須重載 operator() 函數(shù),函數(shù)對(duì)象調(diào)用方式為直接采用構(gòu)造函數(shù)形式。

#include <iostream>#include <vector>using namespace std;int sum = 0;void f(int n){sum += n;}class SumClass{public:SumClass():sum(0){}void operator()(int n){sum += n;}int getSum(){return sum;}private:int sum;};template <typename T> class TSumClass{public:TSumClass():sum(0){}void operator()(T n){sum += n;}T getSum(){return sum;}private:T sum;};int main(){vector<int> vect;for(int i= 1;i<= 100;i++)vect.push_back(i);for_each(vect.begin(),vect.end(),f);cout<<"sum: "<<sum<<endl; //5050 SumClass obj = for_each(vect.begin(),vect.end(),SumClass()); //直接采用構(gòu)造函數(shù)形式調(diào)用。 cout<<"obj.getSum(): "<<obj.getSum()<<endl;   //5050 TSumClass<int> tobj = for_each(vect.begin(),vect.end(),TSumClass<int>());cout<<"tobj.getSum(): "<<tobj.getSum()<<endl;  //5050 }

?

merge():合并兩個(gè)排序列表;
splice():拼接兩個(gè)列表;
sort():列表的排序;

#include <list>#include <iostream>int main(){int array1[4] = {1,5,3,10};int array2[4] = {2,8,6,9};std::list<int> lt1(array1,array1+4),lt2(array2,array2+4);lt1.sort();lt2.sort();//lt1.splice(lt1.begin(),lt2); //2,6,8,9,1,3,5,10lt1.merge(lt2); //1,2,3,5,6,8,9,10}

?

queue(隊(duì)列,先進(jìn)先出)與stack(棧,后進(jìn)先出)的構(gòu)造函數(shù):

queue(class T,class Container = deque<T>);

stack(class T,class Container = deque<T>);

其默認(rèn)容器都是deque.

priority_queue 默認(rèn)容器是 vector.

隊(duì)列獨(dú)有的函數(shù):T& front();??? T& back();

堆棧獨(dú)有的函數(shù):T& top();?? 返回棧頂元素,其實(shí)類(lèi)似于 back();

容器適配器只是基礎(chǔ)容器類(lèi)的再封裝,不是重新定義。

queue 可以使用 deque? 和 list 做為基礎(chǔ)容器(vector 沒(méi)有 pop_front 方法), stack 可以使用 deque、 list?和 vector 做為基礎(chǔ)容器。

?

再談迭代器:

非變異算法列表:

?

變異算法列表:

?

排序及相關(guān)函數(shù)列表:

總結(jié)

以上是生活随笔為你收集整理的《C++STL基础及应用》读书笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。