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

C++ Primer學習筆記2--c++標准庫中的 vector、string 和 bitset 類型

編輯:C++入門知識

一.string    #include <string>  using std::string    初始化函數:    string s1;        默認構造函數 s1 為空串  string s2(s1);   將 s2 初始化為 s1 的一個副本  string s3("value");將 s3 初始化為一個字符串字面值副本  string s4(n, 'c');將 s4 初始化為字符 'c' 的 n 個副本    string s4(5,'6')  66666  為了與 C 語言兼容,字符串字面值與標准  庫 string 類型不是同一種類型。      cin >> s;  從標准輸入讀取 string 並將讀入的串存儲在 s 中。string 類型的輸入操 作符:  • 讀取並忽略開頭所有的空白字符(如空格,換行符,制表符)。  • 讀取字符直至再次遇到空白字符,讀取終止。    讀入未知數目的string對象《每行輸出一個單詞》  string str;  while (cin>>str) {  cout<<str<<endl;  }    使用getline讀取正行文本《每次輸出一行文本》  string line;  while (getline(cin,line)) {  cout<<line<<endl;  }    字符串操作符    s.empty()  如果 s 為空串,則返回 true,否則返回 false。    s.size()  返回 s 中字符的個數  返回類型:string::size_type。    s[n]  返回 s 中位置為 n 的字符,位置從 0 開始計數    s1 + s2  把 s1 和 s2 連接成一個新字符串,返回新生成的字符串    s1 = s2  把 s1 內容替換為 s2 的副本    v1 == v2  比較 v1 與 v2 的內容,相等則返回 true,否則返 回 false    !=,<,<=,>,and>  保持這些操作符慣有的含義  #include<CCType.h>    cctype 中的函數  isalnum(c)  isalpha(c)  iscntrl(c)  isdigit(c)  isgraph(c)  islower(c)  isprint(c)  ispunct(c)  isspace(c)  isupper(c)  isxdigit(c)  tolower(c)  toupper(c)  如果 c 是字母或數字,則為 True。   如果 c 是字母,則為 true。  如果 c 是控制字符,則為 true   如果 c 是數字,則為 true。  如果 c 不是空格,但可打印,則為 true。   如果 c 是小寫字母,則為 true。  如果 c 是可打印的字符,則為 true。   如果 c 是標點符號,則 true。  如果 c 是空白字符,則為 true。  如果 c 是大寫字母,則 true。  如果是 c 十六進制數,則為 true。  如果 c 大寫字母,返回其小寫字母形式,否則直接返回 c。   如果 c 是小寫字母,則返回其大寫字母形式,否則直接返回 c。      建議采用 C 標准庫頭文件的 C++ 版本,  #include <cctype>   C建議采用此版本  #include <ctype.h>  C++  -------------------------------------------------   二.vector 是同一種類型的對象的集合  #include<vector>  using std::vector;      vector<int>  ivec;//vector不是一種數據類型,而是一種類模板,vector<int>是一種數據類型  初始化    vector<T> v1;  vector 保存類型為 T 對象。  默認構造函數 v1 為空。    vector<T> v2(v1);   v2 是 v1 的一個副本。      vector<T> v3(n, i);  v3 包含 n 個值為 i 的元素。      vector<T> v4(n); vector<int>v4(10);  v4 含有值初始化的元素的 n 個副本。10 elements, each initialized to 0      vector 對象的操作  vector 標准庫提供了許多類似於 string 對象的操作  v.empty()  如果 v 為空,則返回 true,否則返回 false。    v.size()  返回 v 中元素的個數。vector<int>::size_type  num;      v.push_back(t)  在 v 的末尾增加一個值為 t 的元素。    v[n]  返回 v 中位置為 n 的元素。    v1 = v2  把 v1 的元素替換為 v2 中元素的副本。    v1 == v2  如果 v1 與 v2 相等,則返回 true。    !=, <, <=,  >, and >=  保持這些操作符慣有的含義    關鍵概念:安全的泛型編程  習慣於 C 或 Java 編程的 C++ 程序員可能會覺得難以理解,for 循環 的判斷條件用 != 而不是用 < 來測試 vector 下標值是否越界。C 程序 員難以理解的還有,上例中沒有在 for 循環之前就調用 size 成員函數 並保存其返回的值,而是在 for 語句頭中調用 size 成員函數。  C++ 程序員習慣於優先選用 != 而不是 < 來編寫循環判斷條件。在上例 中,選用或不用某種操作符並沒有特別的取捨理由。學習完本書第二部 分的泛型編程後,你將會明白這種習慣的合理性。  調用 size 成員函數而不保存它返回的值,在這個例子中同樣不是必需 的,但這反映了一種良好的編程習慣。在 C++ 中,有些數據結構(如 vector)可以動態增長。上例中循環僅需要讀取元素,而不需要增加新 的元素。但是,循環可以容易地增加新元素,如果確實增加了新元素的 話,那麼測試已保存的 size 值作為循環的結束條件就會有問題,因為 沒有將新加入的元素計算在內。所以我們傾向於在每次循環中測試 size 的當前值,而不是在進入循環前,存儲 size 值的副本。  我們將在第七章學習到,C++ 中有些函數可以聲明為內聯(inline)函 數。編譯器遇到內聯函數時就會直接擴展相應代碼,而不是進行實際的 函數調用。像 size 這樣的小庫函數幾乎都定義為內聯函數,所以每次 循環過程中調用它的運行時代價是比較小的。  每種容器類型都定義了自己的迭代器類型,用於訪問容器內的元素,即,每個容器都定義了一個自己的 iterator  如 vector:  vector<int>::iterator iter;    1.begin()/  end()    for (vector<int>::iterator iter = text.begin();iter != text.end() ; iter++) {  *iter = 4;    }      只能讀取容器內元素,但是不可以改變  vector<int>::const_iterator      2.算數操作  iter + n;  iter1-iter2  defference_type    三.bitset    #include<bitset>  using std::bitset;    初始化  bitset<n> b;   // b 有 n 位,每位都 0  bitset<32> b;    bitset<n> b(u);//  b 是 unsigned long 型 u 的一個副本 bitset<32> b(0xffff);   // bits 0 ... 15 are set to 1, 16 ... 31 are 0      bitset<n> b(s); // b 是 string 對象 s 中含有的位串的副本  string strval("1100");  bitset<32> bitvec4(strval);//從 string 對象讀入位集的順序是從右向左(from right to left):bitvec4 的位模式中第 2 和 3 的位置為 1,其余位置都為 0。如果 string 對 象的字符個數小於 bitset 類型的長度,則高階位置為 0。          bitset<n> b(s, pos, n);//b 是 s 中從位置 pos 開始的&nbps;n 個位的副  string str("1111111000000011001101");  bitset<32> bitvec5(str, 5, 4); // 4 bits starting at str[5], 1100    位操作  b.any()  b 中是否存在置為 1 的二進制位?    b.none()  b 中不存在置為 1 的二進制位嗎?      b.count()  b 中置為 1 的二進制位的個數      b.size()  b 中二進制位的個數      b[pos]  訪問 b 中在 pos 處二進制位      b.test(pos)  b 中在 pos 處的二進制位置為 1 麼?      b.set()  把 b 中所有二進制位都置為 1     b.reset()            把所有二進制位設為0      b.set(pos)      把 b 中在 pos 處的二進制位置為 1      flip 操作可以對 bitset 對象的所有位或個別位取反:  bitvec.flip(0);   // reverses value of first bit  bitvec[0].flip(); // also reverses the first bit  bitvec.flip();    // reverses value of all bits           

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