CCF考試中常用到的庫函式的操作
作為一個程式設計的初學者,在學校能夠參加的認證考試也就是隻有CCF認證考試了,而對於這個認證考試,一般套路固定,第三題多為字串操作的題目,第四題多為圖的相關演算法,基本廣搜和深搜都可解決一些問題,為了在考試時能更高效地編碼,在此對一些常用的庫函式做一些總結:
1.C++字串操作函式:
#include<string>
string型別作為一個類而不是基礎資料型別,有其構造方法,庫函式中提供的方法我認為比較好用的有以下幾種:
(1)strings; //生成一個空字串s(2)string s(str)//拷貝建構函式生成str的複製品
(3)strings(chars,chars_len)//
除了構造方法之外,還有一些字串操作的函式,很好用,初學者可以把string型別當成int型別來看。(過載運算子真是c++中一個非常高明的地方):
(1)=,assign() //賦以新值(2)swap() //交換兩個字串的內容(3)+=,append(),push_back() //在尾部新增字元(4) insert() //插入字元(5) erase() //刪除字元(6) clear() //刪除全部字元
(7)replace()//替換字元
(8)+//串聯字串(9)==,!=,<,<=,>,>=,compare() //比較字串
(10)size(),length() //
2.C++vector操作函式
#include<vector>
vector作為容器,時常用在我需要動態儲存資料時,有時為了減小空間複雜度,不會設定固定大小的陣列,而使用vector,相關的操作函式也很簡單,可能起到的作用比儲存還要多。其構造方法常用的為:
(1)vector<int> c // 建立一個空的vector(2)vector<int> c1(c2) // 複製一個vector(3)vector<int> c(n) // 建立一個vector,含有n個數據,資料均已預設構造產生
相關的操作函式為:
c.assign(beg,end) // 將[beg; end)區間中的資料賦值給c。
c.assign(n,elem) // 將n個elem的拷貝賦值給c。c.at(idx) //傳回索引idx所指的資料,如果idx越界,丟擲out_of_range。c.back() // 傳回最後一個數據,不檢查這個資料是否存在。c.begin() // 傳回迭代器中的第一個資料地址。c.capacity() // 返回容器中資料個數。c.clear() // 移除容器中所有資料。c.empty() // 判斷容器是否為空。c.end() // 指向迭代器中末端元素的下一個,指向一個不存在元素。c.erase(pos) // 刪除pos位置的資料,傳回下一個資料的位置。c.erase(beg,end) //刪除[beg,end)區間的資料,傳回下一個資料的位置。c.front() // 傳回第一個資料。c.get_allocator // 使用建構函式返回一個拷貝。c.insert(pos,elem) // 在pos位置插入一個elem拷貝,傳回新資料位置。c.insert(pos,n,elem) // 在pos位置插入n個elem資料。無返回值。c.insert(pos,beg,end)// 在pos位置插入在[beg,end)區間的資料。無返回值。c.max_size() // 返回容器中最大資料的數量。c.pop_back() // 刪除最後一個數據。c.push_back(elem) // 在尾部加入一個數據。c.rbegin() // 傳回一個逆向佇列的第一個資料。c.rend() // 傳回一個逆向佇列的最後一個數據的下一個位置。c.resize(num) // 重新指定佇列的長度。c.reserve() // 保留適當的容量。c.size() // 返回容器中實際資料的個數。c1.swap(c2)swap(c1,c2) // 將c1和c2元素互換。同上操作。
對於新手,個人認為,掌握push_bak(),pop_back(),assign(),insert(),back(),begin()差不多就可以了,大部分情況下,我都是當它是陣列使用的,例如訪問最後一個元素時,我經常這樣寫c[c.size()-1],也不知道這樣好不好。
3.C++queue操作函式
#include<queue>
佇列其實很多操作和vector一樣,馬上要講到的stack其實也一樣,不過學了資料結構的新手們還是能稍微分別兩者的一些差別的,不多說,先上函式:
empty():返回bool型別的值,是否佇列為空
push():會將一個元素置入queue中
front():會返回queue內的第一個元素(隊頭)
back():會返回queue中的最後一個元素(隊尾)
pop():會移除queue內的第一個元素(隊頭,與stack不同,先進者先出)
size():返回佇列中元素多少
除此之外,我記得有一次看程式碼有一個priority_queue,可以在儲存的同時將佇列排序成為降序,想要排列成為升序?把要排的類的<操作符過載為相反的意思就可以啦。
4.C++stack操作函式
#include<stack>
棧的操作與佇列相差不多,直接上函式:
empty():返回bool型別的值,是否為空
push():入棧,將一個元素插入到棧頂
pop():出棧,講一個元素移除棧頂,不返回該值
top():返回棧頂元素
size():返回棧中元素的多少