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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ primer 笔记 (三)

發(fā)布時(shí)間:2023/12/10 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ primer 笔记 (三) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
標(biāo)準(zhǔn)庫類型string 和 vector ,分別定義了大小可變的字符串和集合。 bitset,提供了一個(gè)抽象方法來操作位的集合。提供更方便的處理位的方式(相對(duì)于整型值上的位操作符) vector用于保存一組指定類型的對(duì)象。 ::作用域操作符 ? ?---- ?右操作數(shù)的名字可以在左操作數(shù)的作用域中找到。 using聲明 ? 使用標(biāo)準(zhǔn)庫類型的定義 有一種情況下,必須總是使用完全限定的標(biāo)準(zhǔn)庫名字:在頭文件中。 理由是頭文件的內(nèi)容會(huì)被預(yù)處理器復(fù)制到程序中。用#include包含文件時(shí),相當(dāng)于頭文件中的文本將成為我們編寫文件的一部分。如果在頭文件中放置using聲明,就相當(dāng)于在包含該頭文件的每個(gè)程序中都放置了同一using聲明,不論該程序是否需要using聲明。 ? 通常,頭文件中應(yīng)該只定義確實(shí)必要的東西。 字符串字面值與標(biāo)準(zhǔn)庫string類型不是同一種類型。 ? string s; cin >> s;?// 讀取并忽略開頭所有的空白字符(如空格,換行符,制表符) // ?讀取字符直至再次遇到空白字符,讀取終止 // " ? ?Hello ?world! " ---->>>> ?Hello 1.讀入未知數(shù)目的string對(duì)象 把輸入操作作為判斷條件 while(cin >> word) 2.用getline讀取整行文本(并不忽略行開頭的換行符 getline(cin,line)從輸入流的下一行讀取,并保存讀取的內(nèi)容到string中,不包括換行符 一個(gè)輸入流對(duì)象和一個(gè)string對(duì)象 getline函數(shù)返回時(shí)丟棄換行符,換行符將不會(huì)存儲(chǔ)在string對(duì)象中 s.size() ?s.empty() ?s[n] ?s1 + s2 ? s1 = s2 v1 == v2 size操作返回的是string::size_type類型的值 string類類型和許多其他庫類型都定義了一些配套類型(companion type)。通過這些配套類型,庫類型的使用就能與機(jī)器無關(guān)(machine-independent) 定義為與unsigned型具有相同的含義(不知道確切類型),而且可以保證足夠大能夠存儲(chǔ)任意string對(duì)象長度。 不要把size的返回值賦給一個(gè)int變量 ? ***********網(wǎng)上找的例子***************

注意,任何存儲(chǔ)string的size操作結(jié)果的變量必須為string::size_type類型。尤其不能把size的返回值賦給一個(gè)int變量。(因?yàn)閟ize返回的是一個(gè)unsigned類型,而int是signed類型。size能表達(dá)的大小是int的2倍)。

string str("some string");?? //通過字符串字面值賦值給串
for (string::size_type ix = 0; ix != str.size(); ++ix)?? //此處不該為int???? 用!=,而不用<=
{
?? cout<<str[ix]<<endl;
}

vector<int> ivec;
for(vector<int>::iterator ix = ivec.begin(); ix != ivec.end(); ++ix)???
??????????????????????????????????????????????????????????????????????? //此處不該為int???? 用!=,而不用<=

{
??? *ix = 0; //將各個(gè)元素賦值為0
} *********************************后來發(fā)現(xiàn)在書后面有這個(gè)例子 string st1, st2 = "The expense of spirit"; st1 = st2; ? /replace st1 by a copy of st2 效率問題 .....1先把st1占用的相關(guān)內(nèi)存釋放掉 2分配給st1足夠存放st2副本的內(nèi)存空間 3把st2中的所有字符復(fù)制到新分配的內(nèi)存空間。.... 當(dāng)進(jìn)行string對(duì)象和字符串字面值混合連接操作時(shí),+操作符的左右操作數(shù)必須至少有一個(gè)string類型的 ? string s1 = "hello"; ? ? ? ? ?// no punctuation string s2 = "world";? string s3 = s1 + ", "; ? ? ? // ok:adding a string and a literal string s4 = "hello" + ", "; //?error: no string operand string s5 = s1 + ", " + "world" ?// ok: each + has string operand string s6 = "hello" + ", " + s2; ?//?error:can't add string literals ? 雖然任何整型數(shù)值都可作為索引,但索引的實(shí)際數(shù)據(jù)類型卻是unsigned類型string::size_type ? cctype頭文件 isalnum(c) ? isalpha(c) ? iscntrl(c) ? isdigit(c) ?isgraph(c)不是空格,但可打印 ?islower(c) ?isprint(c) 可打印 ispunct(c)標(biāo)點(diǎn) ? isspace(c) ? isupper(c) ?isxdigit(c)16進(jìn)制數(shù) ?tolower(c) ?toupper(c) ? vector是同一種類型的對(duì)象的集合,每個(gè)對(duì)象都有一個(gè)對(duì)應(yīng)的整數(shù)索引值。 和string對(duì)象一樣,標(biāo)準(zhǔn)庫將負(fù)責(zé)管理與存儲(chǔ)元素相關(guān)的內(nèi)存。 vector稱為容器,因?yàn)樗梢园渌麑?duì)象。 一個(gè)容器中的所有對(duì)象都必須是同一種類型的。 vector是一個(gè)類模板(class template)不是一種數(shù)據(jù)類型 可定義任意多種數(shù)據(jù)類型 ?vector<int>和vector<string>都是數(shù)據(jù)類型 ? vector<int> ivec; ?//該類型含有int類型對(duì)象的vector,變量名為ivec ? ? vector<int> ivec1; vector<int> ivec2(ivec1); vector<int> ivec4(10,-1); vector<string>svec(10,'hi!'); ? vector對(duì)象的重要屬性就在于可以在運(yùn)行時(shí)高效地添加元素。 ? vector元素連續(xù)存儲(chǔ) 初始化一個(gè)空vector對(duì)象,然后再動(dòng)態(tài)地增加元素(更有效相比于對(duì)vector對(duì)象預(yù)先分配內(nèi)存) 值初始化 1vector<int> fvec(10); ?// 10 elements,each initialized to 0 內(nèi)置類型 ?值為0 2vector<string> svec(10); ?// 10 elements,each an empty string 默認(rèn)構(gòu)造函數(shù) 3元素類型可能是沒有定義任何構(gòu)造函數(shù)的類類型。標(biāo)準(zhǔn)庫仍產(chǎn)生一個(gè)帶初始值的對(duì)象,這個(gè)對(duì)象的每個(gè)成員進(jìn)行了值初始化。 v.empty() v.size() v.push_back(t) v[n] v1 = v2 v1==v2 vector<int>::size_type vector中的對(duì)象是沒有命名的,可以按vector中對(duì)象的位置來訪問它們。通常使用下標(biāo)操作符來獲取元素。 c++程序員習(xí)慣于優(yōu)先選用!=而不是<來編寫循環(huán)判斷條件。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。后面會(huì)講到 ? size()內(nèi)聯(lián)函數(shù) ? 編譯器遇到內(nèi)聯(lián)函數(shù)時(shí)就會(huì)直接擴(kuò)展相應(yīng)代碼,而不是進(jìn)行實(shí)際的函數(shù)調(diào)用。運(yùn)行時(shí)代價(jià)較小 ? ? 緩沖區(qū)溢出對(duì)不存在的元素進(jìn)行下標(biāo)操作的結(jié)果 迭代器是一種檢查容器內(nèi)元素并遍歷元素的數(shù)據(jù)類型。 對(duì)所有容器都適用,下標(biāo)不一定適用所有容器 vector<int>::iterator iter; iter的數(shù)據(jù)類型是由vector<int>定義的iterator類型 每個(gè)容器都定義了一個(gè)名為iterator的類型,而這種類型支持(概念上的)迭代器的各種操作。 vector<int>::iterator iter = ivec.begin(); ivec.end()---->>指向了“末端元素的下一個(gè)” ? ?一個(gè)不存在的元素 稱為超出末端迭代器 ? 如果vector為空,begin返回迭代器與end返回的迭代器相同 由end操作返回的迭代器并不指向vector中任何實(shí)際的元素,相反,它只是起一個(gè)哨兵(sentinel)的作用,表示我們已處理完vector中所有元素 ? 解引用操作符(*操作符)來訪問迭代器所指向的元素 *iter = 0;返回迭代器當(dāng)前所指向的元素 若iter指向ivec第一個(gè)元素,則*iter = ivec[0] ?指向同一個(gè)元素 ,值被賦為0。 for(vector<int>::iterator iter = ivec.begin();iter ?!= ivec.end();++ivec) *iter = 0; const_iterator 能讀不能寫 P86。。。。。。。。。。。。。。。。。。。。。 bitset類型 bitset類型對(duì)象的區(qū)別僅在其長度而不在其類型。 bitset<32> bitvec; // 32bits,all zero 只能按位置來訪問它們。 相對(duì)于C++內(nèi)置數(shù)據(jù)類型的數(shù)組和指針而言,程序員應(yīng)優(yōu)先使用標(biāo)準(zhǔn)庫類類型

轉(zhuǎn)載于:https://www.cnblogs.com/wincai/p/4224355.html

總結(jié)

以上是生活随笔為你收集整理的c++ primer 笔记 (三)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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