天天看點

STL(二) 容器vector以及疊代器 iterator

處理string 中的字元

通路字元串的每個字元

for(int i=0;i<s3.size();i++)
{
    cout<<s3[i]<<endl;
    s3[i]='s';
}      

//标準容器疊代器的運算符

*iter           //傳回疊代器iter所指元素的引用
iter->mem       //解引用iter并擷取該元素的名為mem的成員。等價于(*iter).mem
++iter          //令iter訓示容器中的下一個元素
--iter          //令iter訓示容器中的上一個元素
iter1==iter2    //判斷兩個疊代器是否相等(不相等),如果兩個疊代器訓示的是同一個元素或者
                //它們是同一個容器的尾後疊代器,則相等;反之,不相等。
c.begin();           傳回指向容器最開始位置資料的指針
c.end();             傳回指向容器最後一個資料單元+1的指針      
string str("hi sysu");
for(string::iterator it=str.begin();it!=str.end();it++)
{
   cout <<*it<<endl;
}      

 //使用const_iterator使得通路元素時是能讀不能寫,這跟常量指針意思差不多。

string str2("hi sysu");
for(string::const_iterator it=str2.begin();it!=str2.end();it++)
{
    cout<<*it<<endl;
    *it='1';        //這是錯誤的,不能寫
}      
//cctype頭檔案中的函數
isalnum(c)      //當c是字母或數字時為真
isalpha(c)      //當c是字母時為真
iscntrl(c)      //當c是控制字元時為真
isdigit(c)      //當c是數字時為真
isgraph(c)      //當c不是空格但可列印時為真
islower(c)      //當c是小寫字母時為真
isprint(c)      //當c是可列印字元時為真(即c不是空格或c具有可視形式)
ispunct(c)      //當c是标點符号時為真(即c不是控制字元,數字,字母,可列印空白中的一種)
isspace(c)      //當c是空白時為真(即c是空格,橫向制表符,縱向制表符,回車符,換行符的一種
isupper(c)      //當c是大寫字母時為真
isxdigit(c)     //當c是十六進制數字時為真
tolower(c)      //如果c是大寫字母,輸出對應的小寫字母;否則原樣輸出C
toupper(c)      //如果c是小寫字母,輸出對應的大寫字母;否則原樣輸出c      
//string 還有一些很好用的函數,比如找子串
string sq("hello world!");
cout<<s.find("ll",0)<<endl; //傳回的是子串位置。第二個參數是查找的起始位置,如果找不到,就近傳回string::npos

if(s.find("aa1",0)==string::npos)
{
    cout<<"找不到該子串!!!"<<endl;


}      

//初始化 Vector對象的方法

vector<T> v1                //v1是一個空vector,它的潛在的元素的T類型的,執行預設初始化     
vector<T> v2(v1)            //v2中包含有v1所有元素的副本
vector<T> v2=v1             //等價于v2(v1),v2中包含有v1所有元素的副本
vector<T> v3(n,val)         //v3包含了n個重複的元素,每個元素的值都是val
vector<T> v4(n)             //v4包含了n個重複執行了初始化的對象
vector<T> v5{a,b,c...}      //v5包含了初始值個數的元素,每個元素被賦予相應的初始值
vector<T> v5={a,b,c...}     //等價于v5{a,b,c...}      

//如果vector的元素類型是int,預設初始化為0;如果vector元素類型為string,則預設初始化為空字元串。

vector<int> v1;
vector<father> v2;
vector<string> v3;
vector<vector<int> >;  //注意空格,這裡相當于二維數組int a[n][n];
vector<int> v5={1,2,3,4,5};   //清單初始化,注意使用的是花括号
vector<string> v6={"hi","my","name","is","lee"};
vector<int> v7(5,-1);       //初始化為-1,-1,-1,-1,-1.第一個參數是數目,第二個參數是要初始化的值
vector<string> v8(3,"hi");
vector<int> v9(10);        //預設初始化為10.10.10.10.10。。。。。。。
vector<int> v10(4);         //預設初始化為空字元串      

//如何向vector添加元素?

//請使用push_back加入元素,并且這個元素是被加在數組尾部的。

for(int i=0;i<20;i++)
{
    v1.push_back(i);

}      

vector支援的其他的操作

v.empty()    //如果V不包含有任何的元素,傳回真,否則傳回假
v.size()     //傳回v中元素的個數
v.push_back(t)  //向V的尾端添加一個值為t的元素
v[n]            //傳回v中第n個位置上元素的引用
v1=v2           //用v2中元素的拷貝替換v1中的元素
v1={a,b,c...}   //用清單中元素的拷貝替換v1中的元素
v1==v2          //v1和v2相等當且僅當它們的元素數量相同且對應位置的元素值都相同
v1!=v2      
<,<=,>,>=      

通路和操作vector中的元素

for(int i=0;i<v1.size();i++)
{
    cout <<v1[i]<<endl;
    v1[i]=100;
    cout<<v1[i]<<endl;
}      

 使用疊代器通路元素,正向疊代

vector<string> v6={"hi","my","name","is","len"};
for(vector<string>::iterator iter=v6.begin();iter!=v6.end();iter++)
{
    cout<<*iter<<endl;

    //下面兩種方法都行
    cout<<(*iter).empty()<<endl;
    cout<<iter->empty()<<endl;
}      

 反向疊代

for(vector<string>::reverse_iterator iter=v6.rbegin();iter!=v6.rend();iter++)
{
    cout <<*iter<<endl;
}      
push_back()    //把傳送為參數的對象添加到vector的最後
pop_back()      //删除vector尾部的對象
erase()         //删除一個或多個元素
clear()         //删除所有的元素
insert()        //插入一個或多個對象。      

繼續閱讀