5 容器配接器和字串

2021-06-21 15:02:27 字數 2944 閱讀 5381

c++ 標準程式庫還提供了三種容器配接器。

1.stacks(堆疊)

2.queue(佇列)

3.priority queues(帶優先序的佇列)

容器介面卡不提供迭代器操作。

此外這裡還介紹乙個叫bitset的特殊容器。

stacks只提供5個成員函式。

1.push()

2.top()

3.pop()

4.empty()

5.size()

queues提供六個成員函式。

1.push()

2.pop()

3.front()

4.back()

5.empty()

6.size()

priority_queue與set推薦使用set。

有些程式要處理二進位制位的有序集,每個位可能包含 0(關)1(開)值。位是用來儲存一組項或條件的 yes/no 資訊(有時也稱標誌)的簡潔方法。c++標準程式庫提供的 bitset 類簡化了位集的處理。

bitset物件右邊是低位。

初始化方法:

1.bitsetb:b有n位,每乙個是0

2.bitsetb(u):b是unsigned long型u的乙個副本(這裡是用unsigned long的二進位制初始化)。

3.bitsetb(s):b是string型別s的乙個副本。

#include #include using namespace std;

int main()

string物件的搜尋函式返回的是乙個整數而不是迭代器,所有搜尋函式返回的型別都是string::size_type型別,這是一種無符號的型別。第乙個字元的索引值為0,最後乙個字元的索引值為numberofcharacters - 1,和c-string不同,string物件的字串尾部沒有特殊字元'\0'。

如果搜尋失敗,必須返回乙個特殊值表示,這個值是npos,一般寫法是這樣的:

if(idx != string::npos)
特別注意的是,如果打算檢驗搜尋函式的返回值是,應該使用string::size_type型別而不是int或者unsigned。

這裡舉乙個例子,從輸入裝置取得乙個個英文單詞,然後將各個字元逆序輸出。

如果分隔符只有空格,則可以這樣:

#include #include #include #include using namespace std;

int main()

cout << endl;

} return 0;

}

但是如果分隔符有很多,如『\t',',','.'等,這這種方法就行不通了。因為getline分隔單詞只能用空格,可以用下面的程式。

#include #include #include #include using namespace std;

int main()

cout << endl;

} return 0;

}

注意上面的程式還是用的先find,再while迴圈,while迴圈裡再find的方法。

string建構函式需要注意的有以下幾個:

1.string s(cstr):以c-string cstr作為字串s的初始值。

2.string s(cstr,chars_len):以c-string cstr前chars_len作為字串的初值。(這種帶len的引數形式是前n個字元)

3.string s(beg,end):以[beg,end)內的字元作為s的初值。

4.string s(s2,pos2):從下標pos2開始的字元拷貝

5.string s(s2,pos2,len2):從下標pos2開始len2個字元的拷貝。

string也可以用reserve()函式來避免重新分配記憶體,但string的reserve()可以縮減實際容量而vector則不可以,如果string需要減少長度,最快的方法就是用resize()刪除元素。

把string型別轉換為c-string型別直接呼叫c_str()函式。

string特有的版本(pos為下標):

1.s.insert(pos,s2)

在下標為pos的元素前插入s2。這裡有可以引申為

s2,pos2,len:插入s2中pos2開始的len個字元。

注意insert()函式不接受索引+單個字元的模式。

2.s.erase(pos,len)

刪除下標從pos開始的len個字元。

3.s.substr(pos,n)

返回乙個字串,包含s中從下標pos開始的n個字元。這裡第二個引數可以省略。

4.s.replace(pos,len,args)

刪除下標從pos開始的len個字元,用args代替。

將args串接在s後面,注意只能增加字串,不能增加字元,如果要加字元用push_back()函式。

args包括:

1.s2

2.s2,pos2,len

3.cp

4.cp,len

5,n,c

6.beg,end

string的搜尋函式:

1.find():搜尋第乙個與value相等的字元。

2.rfind():搜尋最後乙個與value相等的字元。

3.find_first_of():搜尋第乙個與value中某值相等的字元。

4.find_last_of():搜尋最後乙個與value中某值相等的字元。

5.find_first_not_of():搜尋第乙個與value中任何值都不相等的字元。

6.find_last_not_of():搜尋最後乙個與value中任何值都不相等的字元。

其中可以有三個引數,第乙個引數總是被搜尋的物件,第二個引數為string內搜尋的起點。注意這裡和stl中的函式命名方法不相同!

容器配接器 stacks

stack 堆疊 的簡單使用 include include using namespace std int main if st st1 cout st.size endl 棧中元素的個數 cout st.top endl 返回棧頂元素 st.pop 出棧 st.top 12 改變棧頂元素值 st...

STL 容器配接器

以底部容器完成所有工作,而具有這種修改某物介面而成為另一種風貌的性質者稱為配接器,因此stl stack queue priority queue都稱為容器配接器。stack是一種先進後出的資料結構,不允許有遍歷行為。stl是以deque作為預設情況下的stack底部結構。deque為底部結構並封閉...

C Note 字串和容器

慢慢抄 c primer 補習c 知識 c primer 第五版 3.5.5節中講述了string物件和c風格字串混用的方法。std string比char好用很多,比如說可以簡單地將兩個字串前後拼接起來。然而在root中大多數型別的成員方法都是以c風格字串作為形參的。比如說讀取乙個.root檔案,...