###string#git
使用string類需包含 string 頭文件(舊C風格庫中爲string.h),string定義於命名空間std中(舊風格不是)。數組
#include<string> using std::string;
string的初始化方式:函數
string s1; //默認初始化,s1爲空 string s2(s1); //拷貝初始化,s2爲s1的副本 string s3("hello"); //傳參初始化,s3爲"hello"串,不包含最後的'\0' string s3 = "hello"; //等價於s3("hello"),實現方式不一樣 string s4(n,'c'); //把s4賦值爲連續n個字符'c'組成的字符串
對string對象的操做:spa
os << s is >> s //輸入輸出流 getline(is, s) //從is中讀取一行給s s.empty() //判斷s是否爲空,爲空返回true s.size() //返回s中字符個數 s[n] //訪問s中第n個字符 s1 + s2 //返回s1和s2鏈接後的結果,每一個+兩側必須有一個string對象 s1 = s2 //用s2的副本替代s1 s1 == s2 //若s1和s2中全部字符所有同樣,則爲true s1 != s2 <, <=, >, >= //利用字典序對字符進行比較,且對大小寫敏感
同char數組不一樣的是,string在C++11之前的標準中並無規定必須以'\0'結尾,因此不一樣的編譯器有不一樣的實現規則,而C++11已經規定必須以'\0'結尾了。指針
處理string對象中的字符:cctype頭文件中定義了一組標準庫函數處理字符code
isalnum(c) //當c爲字母或數字爲真 isalpha(c) //當c爲字母時爲真 iscntrl(c) //當c爲控制字符爲真 isdigit(c) //當c爲數字爲真 isgraph(c) //當c不爲空格但可打印時爲真 islower(c) //當c是小寫字母爲真 isprint(c) //當c是可打印字符爲真 ispunct(c) //當c是標點符號時爲真 isspace(c) //當c是空白(空格,製表符..)時爲真 isupper(c) //當c是大寫字母爲真 isxdigit(c) //當c是16進制數字爲真 tolower(c) //若是c爲大寫則轉變爲小寫輸出,不然原樣輸出 toupper(c) //若是c爲小寫則轉變爲大寫輸出,不然原樣輸出
###vector#對象
vector又被稱爲容器,表示對象的集合,vector屬於一種類模版,模板自己並非類或者對象,編譯器根據模板來建立類或者函數,稱爲實例化。vector定義於vector頭文件和std命名空間。索引
#include<vector> using std::vector;
經過提供信息來指明容器實例化爲何樣的類:字符串
vector<int> a; //a保存int類型的對象 vector<S> b; //b保存S類型的對象 vector<vector<string>> c; //c保存vector<string>類型的對象
過去vector的嵌套須要在內層和外曾的'>'之間加一個空格,C++11不須要了。get
vector的初始化:
vector<T> a //a爲空vector,其潛在元素是T類型的,默認初始化 vector<T> b(a) //b中包含a中全部元素的副本 vector<T> b = a //同上 vector<T> c(n,v) //c中包含了n個元素,每一個元素都是v vector<T> d(n) //d中包含了n個執行了默認初始化的T對象 vector<T> e{x,y,z...} //e中包含了初始值個數的元素,每一個元素都被賦初值 vector<T> f={x,y,z...} //f同e
vector操做索引:
v.empty() //若是v爲空則爲真 v.size() //返回v中元素個數 v.push_back(t) //將t加入隊尾 v[n] //返回v中第n個位置上的元素 v1 = v2 //用v2中元素的拷貝替換v1的元素 v1 = {x,y,z...} //用列表中元素拷貝替換v1的元素 v1 == v2 //v1同v2元素數量相同且元素對應位置相同 v1 != v2 <, <=, >, >= //當v一、v2中元素可比時,字典序比較
vector的實現方式爲動態數組,因此其隨機訪問的時間複雜度爲O(1),隊尾push和pop的時間複雜度爲O(1),不支持隨機添加修改刪除,本身寫的話時間複雜度爲O(n)。
vector和string同樣,其size()返回的並非int而是一個size_type類型的值,是一個無符號整型。
###迭代器#
迭代器是string和容器的輔助標準庫類,實現了對string和容器的訪問。迭代器同指針同樣,有效迭代器指向某個元素或容器中尾元素的下一個位置,其餘狀況都屬於無效。
有迭代器的類型經過begin()方法返回第一個元素,end()方法返回尾元素的下一個位置。
auto b = v.begin(); //begin返回v的第一個元素 auto c = v.end(); //end返回v的最後一個元素的下一個位置
若是v爲空,則begin和end都返回v的尾後位置。
迭代器運算符:
*iter //返回迭代器iter所指元素 iter->mem //等同於(*iter).mem ++iter //令iter指向容器的下一個元素 --iter //令iter指向容器的上一個元素 iter1 == iter2 //若是兩個迭代器指向同一元素或爲同一尾後迭代器,則相等 iter1 != iter2
string和vector迭代器提供了更多的運算符:
iter + n iter - n iter += n iter -= n iter1 - iter2 //計算兩個迭代器之間的距離 //參與比較的兩個迭代器必須指向同一容器中元素或尾元素下一位置 >, >=, <, <= //比較操做比較迭代器在容器中的位置,順序爲升序 //參與比較的兩個迭代器必須指向同一容器中元素或尾元素下一位置