程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ Primer 第三章 標准庫類型 筆記

C++ Primer 第三章 標准庫類型 筆記

編輯:C++入門知識

 

C++ Primer 第三章 標准庫類型

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

 

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

本章介紹兩種最重要的標准庫類型string和vector。string類型支持長度可變的字符串,vetor可用於保存一組指定類型的對象。

3.1 命名空間的using聲明

前面看到過std::cin這樣的讀取數據操作,如果每次讀取數據時都這麼寫代碼會感覺非常麻煩和不簡潔,現在介紹一種最安全的機制:using聲明。

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

如:  using std::cin;

-每個名字都需要一個using聲明

如以下代碼:

#include<iostream>

using std::cin;

using std::cout;

using std::endl;

int main()

{

   cout<< “Enter two number:”<<endl;

int v1,v2;

cin>>v1>>v2;

cout<< “The sum of”<<v1

<<“ and”<<v2

<< “is”<<v1+v2<<endl;

return 0;

}

-對cin,cout和endl進行using聲明,就意味著以後可以省去前綴std::,直接使用命名空間中的名字,這樣代碼可以更易讀。

 

3.2 標准庫string類型

摘要:

string類型的輸入操作符:

Ø        讀取並忽略開頭所有空白字符

Ø        讀取字符直至再次遇到空白字符,讀取終止。

用getline讀取整行文本:

-這個函數接受兩個參數:一個輸入流對象和一個string對象

-與輸入操作符不一樣:不忽略行開頭發換行符。

關於string對象的操作

size和empty操作

可以用size操作獲取string對象的長度(字符的個數)

如:對象s,調用size函數:s.size();

也可以用來判斷string對象是否為空:

if(s.size()==0)

判斷string對象是否為空第二種方法就是用empty操作

if(s.empty())

empty()成員函數將返回bool值,string對象為空則返回true,否則返回false。

string::size_type類型

-size操作返回的是string::size_type類型的值

它定義為與unsigned型具有相同含義,並且可以保證足夠大能夠存儲任意string對象的長度。

從string對象獲取字符

-下標操作符需要一個size_type類型的值,來標明要訪問字符的位置。

-string對象的下標從0開始,對象s的最後一個字符表示為s[s.size()-1]

可以用下標操作符分別取出string對象的每個字符,分別輸出:

string str(“some string”);

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

cout<<str[ix]<<endl;

-下標操作可用作左值

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

str[ix]=’*’;

string對象中字符的處理都在cctype頭文件定義。

 

 

標准庫vector類型

-vector是同一種類型的對象的集合,每個對象都有一個對應的整數索引值。

-vector被稱為容器,是因為它可以包含其他對象,一個容器中的所有對象都必須是同一種類型的。

-vector是一個類模板,使用模板可以編寫一個類定義或函數定義,而用於多個不同的數據類型。

-和其他變量一樣,定義vector對象要指定和一個變量列表。

具體如下:

vector<int> ivec;  //該類型即是含有若干int類型對象,變量名為ivec

vector對象的定義和初始化

- vector對象的定義和初始化

下面介紹幾種初始化vector對象的方式

vector<T>v1;          //默認構造函數,v1為空

vector<T>v2(v1);      //v2是v1的一個副本

vector<T>v3(n,i);     //v3包含n個值為i的元素

vector<T>v4(n);       //v4含有初始化的元素的n個元素

vector對象的操作

-vector標准庫提供了許多類似string對象的操作

-如對size和empty的操作跟string類型一樣的

向vector添加元素

用以下代碼來說明:

 string word;

vector<string>text;

while(cin>>word){

      text.push_back(word);

}

-上述代碼中text.push_back(word)是vector對象text引用push_bacd()函數,這個操作的作用是為vector添加元素,添加到vector對象的後面。

vector的下標操作

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

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

ivec[ix]=0;

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

 

 

3.4 迭代器簡介

-迭代器是一種檢查容器內元素並遍歷元素的數據類型

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

容器的iterator類型

如vector:

vector<int>::iteratoriter;//定義名為iter的變量,它的數據類型是由vector<int>定義的iterator類型。

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

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

begin和end操作

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

vector<int>::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對象的方法

bitset<n>b;            //對象b有n為位,每位為0

bitset<n> b(u);       //b是unsignedlong型u的一個副本

bitset<n> b(s);       //b是string對象s中含有位串的副本

bitset<n> b(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++發展的趨勢就是不斷人性化,學習以最簡潔最易理解的方式來編寫程序,不斷簡化程序,減少代碼的編輯量,我想自己走的就是這樣的方向

 

摘自:wwj的夢想之路

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved