c primer 3 標準庫型別

2022-05-02 17:18:09 字數 3100 閱讀 9150

3.1 命名空間的using宣告

using宣告是對某個命名空間做引入。主要作用是簡化**編寫。

比如用cout的三種方式:

using

namespace

std;

using

std::cout;

std::cout

<3.2 標準庫string型別

定義和初始化

#include

using std::string

string s1 ;  // 呼叫預設建構函式初始化物件

strng s2(s1) ; // 將s2初始化為s1的乙個副本

string s3("value") ; // 用乙個字串值初始化物件

string s4(n,'c') ; // 用n個字元『c』組成字串作為初始化s4的值

string物件的讀寫

cin>>str;  讀取並忽略開頭所有空白字元(空格,換行符,製表符),直到再次遇到空白字元為止

getline(cin,str)  以換行符為讀取結束標誌,但並不忽略開頭換行符,如果第乙個字元是換行符,置空

string物件的操作

s.empty() ;   // 判斷s是否為空,相當於s.size()==0

s.size() ;       // s的長度

s[n] ;            // n位置的字元(左值返回)

s1+s2 ;         // 返回s1和s2連線的串

s1=s2 ;         // 把s1替換為s2的副本

s1==s2 ;      // 判斷s1,s2是否相等

!=,<,<=,>,>=    // 按字典順序比較  若乙個字串為另乙個的字首,這長度長的大

size操作返回string::size_type()型別,不要把size返回的結果賦給乙個int變數,string型別下標操作也需要用size_type型別

為什麼不用int而新創造乙個型別呢,原因有如下兩點:

1. 取值範圍不同,int有固定的取值範圍,並且可以取負數,但字串長度是不可能為負的,並且長度的大小很可能會超過int的範圍而導致溢位

2. int的範圍大小與機器相關,有的機器上範圍大些,有點機器小一些。但是字串長度應該是個不能隨機器發生大小改變的值,所以即使用無符號int來表示串大小也是不合適的

這種思想是配套型別,很多庫中都用到

字串字面值的連線,+操作符的左右運算元必須至少有乙個string型別

string s1 = "hello" + s2

string s3 = "hello" + "world"  錯

cctype

isalnum(c) ; // 假如c是字母或數字,則為true

isalpah(c) ;  // 假如c是字母,則為true

iscntrl(c) ;   // 假如c是控制字元,則為true

isdigit(c) ;   // 假如c是數字,則為true

isgraph(c) ; // 假如c不是空格,則為true

islower(c) ; // 假如c是小寫字母,則為true

isprint(c) ;  // 假如c是可列印的字元,則為true

ispunct(c) ; // 假如c是標點符號,則為true

isspace(c) ; // 假如c是空白字元,則為true

isupper(c) ; // 假如c是大寫字母,則為true

isxdigit(c) ; // 假如c是十六進製制數,則為true

tolower(c) ; // 假如c是大寫字母,則返回小寫字母形式(對應的int值),否則返回c。

toupper(c) ;// 假如c是小寫字母,則返回大些字母形式(對應的int值),,否則返回c。

3.3 標準vector型別

3.4 迭代器簡介

見c++ primer 9 順序容器

強調幾點:

1. 容器下標不能用作新增元素,只能用作獲取元素,僅能對已存在的元素進行下標操作

2. const_iterator自身能改變,指向的值不能修改,注意與const型別的iterator的區別

1 vector::const_iterator iter  //

定義乙個代表常量的迭代器,和普通迭代器唯一不同的就是不能通過解引賦值

23 *iter = "

new value

"; //

這是不允許的,因為const_iterator告訴編譯器我代表的是乙個常量,所以不能通過任何手段改變其值45

const vector::iterator iter //

定義乙個常迭代器,迭代器代表的變數,但迭代器本身是常量,所以可以更改代表的內容但無法更改迭代器

67 *iter = "

new value

"; //

沒問題8 iter ++ //

不允許,迭代器是常量所以無法讓他指向其他項910

const vector::const_iterator iter //

這樣定義的迭代器只能讀取初始化指向的列表項內容,既無法向後移動迭代器也無法更改項值內容

3. 迭代器的算術操作有兩種:加上或減去乙個整數值,兩個迭代器相減,但絕對沒有兩個迭代器相加

習題3.14 把vector中的小寫變大寫

1 #include 2

using

namespace

std;

3 #include 4 #include 5 #include 67

intmain()

822 cout<2324

getchar();

25return0;

26 }

3.5 標準bitset型別

看書

再學C Primer(3) 標準庫型別

第三章主要說了string類和vector容器。1.string類的輸入操作 讀取並忽略開頭所有的空白字元 空格,換行,製表 讀取字元直至再次遇到空白字元,讀取終止,如 string s1,s2 cin s1 s2 cout iterator iter ivec.begin iter ivec.en...

再學C Primer(3) 標準庫型別

第三章主要說了string類和vector容器。1.string類的輸入操作 讀取並忽略開頭所有的空白字元 空格,換行,製表 讀取字元直至再次遇到空白字元,讀取終止,如 string s1,s2 cin s1 s2 cout 輸入 hello world 輸出將是 helloworld 2.任何儲存...

C Primer3 讀書筆記 2

第二部分 基本語言 第三章 c 資料型別 1.當乙個數值例如1出現在程式中時,它被稱為文字常量literal constant 稱之為文字是因為我們只能以它的值的形式指代它 稱之為常量是因為它的值不能被改變 0 是int 型,而3.14159 是double 型的文字常量,文字常量是不可定址的non...