C Primer 第三章 標準庫型別 筆記

2021-05-28 15:54:57 字數 3501 閱讀 2198

c++ primer 第三章 標準庫型別

標準庫型別是我之前沒有接觸過內容,不僅是這一章,整本書有很多東西對我來說都是新的,譚伯伯那本介紹的東西只是c++中的皮毛罷了。感覺到學習c++將是個無底洞。學到什麼程度才算高深,我現在心裡沒數,只能硬著頭皮,踏著那倔強的神經學下去。

第2章所涉及的型別都是低階資料型別:這些型別表示數值或字元的抽象,並根據器具體機器表示來定義。

本章介紹兩種最重要的標準庫型別string和vector。string型別支援長度可變的字串,vetor可用於儲存一組指定型別的物件。

3.1命名空間的using宣告

前面看到過std::cin這樣的讀取資料操作,如果每次讀取資料時都這麼寫**會感覺非常麻煩和不簡潔,現在介紹一種最安全的機制:using宣告

-使用using宣告,我們可以直接引用名字,而不需要在引用改名字的命名空間。

如:  using std::cin;

-每個名字都需要乙個using宣告

如以下**:

#includeusing std::cin;

using std::cout;

using std::endl;

int main()

-上述**中 text.push_back(word)是vector物件text引用push_bacd()函式,這個操作的作用是為vector新增元素,新增到vector物件的後面。

vector的下標操作

跟string型別類似,用size_type型別作為vector下標型別:

for(vector::size_typeix=0;ix!=str.size();++ix)

ivec[ix]=0;

-警告:下標操作不新增元素,僅能對確定存在的元素進行下標操作。

3.4迭代器簡介

-迭代器是一種檢查容器內元素並遍歷元素的資料型別

-它可以代替下標操作來訪問元素,並且比下標操作跟通用,所有標準庫容器都定義了相應的迭代器型別,而只有少數的容器支援下標操作。

容器的iterator型別

如vector:

vector::iteratoriter;//定義名為iter的變數,它的資料型別是由vector定義的iterator型別。

關於術語:迭代器和迭代器型別

-重要理解:若一種型別支援一組確定的操作(這些操作可用來遍歷容器內的元素,並訪問這些元素的值),我們就稱這種型別為迭代器

beginend操作

-這兩個操作用來返回迭代器

vector::iteratoriter=ivec.begin();

-用begin操作返回迭代器指向的第乙個元素,end操作來返回迭代器指向的最後乙個元素下乙個元素(稱為超出末端迭代器)

const_iterator

-每種容器型別還定義const_iterator的型別,該型別只能用於讀取容器內的元素,但不能改變其值。

-當對const_iterator型別進行解引用(*),返回的是乙個const值,不允許用const_iterator進行賦值。

-使用const_iterator型別時,它自身的值可以改變,但不能用來改變其所指向的元素的值。

-可以對迭代器進行自增以及使用解引用操作符來讀值,但不能對該元素值賦值。

-注意:不要把const_iterator物件與const的iterator物件混淆。

-const迭代器幾乎沒什麼作用,因為一旦它初始化,只能用它來改寫其指向的元素,而不能使它指向任何元素。

3.5標準庫bitset型別

-提供bitset型別是用來處理二進位制位的有序集的。

-bitset也是一種類模板,但與vector的區別僅在其長度而不在其型別。

-在定義bitset時,要明確bitset含有多少位,須在尖括號內給出長度值:

bitset<32>bitvec;   //bitvec被定義為含有32位的bitset物件

初始化bitset物件的方法

bitsetb;            //物件b有n為位,每位為0

bitsetb(u);       //b是unsignedlong型u的乙個副本

bitsetb(s);       //b是string物件s中含有位串的副本

bitsetb(s,pos,n);//b是s中從位置pos開始的n個位的副本

-當用unsigned long值作為bitset物件的初始值時,該值將轉化為二進位制的位模式。

十六進製制值0xffff表示為二進位制位就是十六個1十六個0

//bitvec1 的長度小於初始化值

bitset<16>bitvec1(0xffff);   //0~15位被設定為1

//bitvec2的長度和unsigned long相同

bitset<32>bitvec2(0xffff);   //0~15位設定為1,1~31位設定為0

//bitset3的長度大於usigned long

bitset<128>bitvec3(0xffff);  //位32到127被初始化為0

當用string物件初始化bitset物件時,string物件直接表示為為模式。從string物件讀入位集的順序是從右向左:

string strval(「1100」);

bitset<32>bitvec4(strval);

//bitvec4的位模式中第2和3位置為1,其餘位置都為0.

-註解:string物件和bitset物件之間是反向轉化:string物件的最右邊字元用來初始化bitset物件的低階位。

bitset物件上的操作

-用來測試或設定bitset物件中的單個或多個二進位制位。

-count操作的返回型別是標準庫中命名為size_t的型別

-bitset的size操作返回bitset物件中二進位制位的個數,返回值是size_t的型別

-具體操作內容易理解就不做太多摘錄

總結:本章介紹了三種標準庫型別,乙個是string型別、vector型別和bitset型別,這三種型別有很多類似之處,我覺得只要理解了其中的一種型別的基本概念和具體操作,然後對三種型別進行聯絡,也許就不會混淆,這一章簡單簡介了容器和迭代器,我對它們有了一定的了解,c++發展的趨勢就是不斷人性化,學習以最簡潔最易理解的方式來編寫程式,不斷簡化程式,減少**的編輯量,我想自己走的就是這樣的方向。

C primer第三章 標準庫型別

一 標準庫string型別 include 1 string物件的定義和初始化 表3.1幾種初始化string物件的方式 string s1 預設建構函式,s1為空串 string s2 s1 將s2初始化為s1的乙個副本 string s3 value 將s3初始化為乙個字串字面值的副本 stri...

C Primer 第三章 標準庫型別

c 定義了兩種最重要的標準庫型別 string 和 vector,它們分別定義了大小可變的字串和標準庫。其中,string型別支援長度可變的字串,vector可用於儲存一組指定類 型的物件。3.2標準庫string 型別 string型別支援長度可變的字串,使用者程式要使用string型別物件,必須...

《C Primer》 第三章 標準庫型別

除低階資料型別,c 標準庫還定義了許多更高階的抽象資料型別 abstract data type 比如string,vector,bitset。命名空間的using宣告 使用using宣告可以在不需要加字首namespace name 的情況下訪問命名空間中的名字。using namespace n...