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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ primer 笔记 (三)

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

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

轉載于:https://www.cnblogs.com/wincai/p/4224355.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。