STL函式整理

2021-09-26 06:10:19 字數 3763 閱讀 4727

unique函式

這是乙個去重函式,去除相鄰元素的重複元素,由於是相鄰元素,因此使用前一般要對元素進行排序(排序可以用到sort函式)。這裡的「去除」並不是將元素刪除掉,而是後面不重複的元素向前移動,將重複元素覆蓋。例如數字:1 ,3 , 3, 4, 5,6 , 6 , 7 經過去重之後變為1,3,4,5,6,7,6,7

元素的個數並沒有改變。

函式原型:(兩個引數的情況)

iterator unique

(iterator it_1,iterator it_2)

;

返回值為乙個迭代器,指向不重複元素的下乙個元素,對於上乙個例子來說,返回指向6的迭代器(這個6是第七個數)。

可以結合vector將重複元素刪除,這裡要用到erase函式(題目超連結有dalao**hhhh)

#include

#include

#include

using

namespace std;

intmain()

; vector<

int>v;

for(

int i=

0;i) v.

push_back

(num[i]);

vector<

int>

::iterator it=v.

begin()

;sort

(it,it+n)

;//先排序

cout<<

"去重前的陣列元素為:"

<

for(

int i=

0;i<

8;i++

) cout<

<<

" ";

cout<

vector<

int>

::iterator new_it;

new_it=

unique

(it,it+8)

;//去重,返回指向6的迭代器

cout<<

"去重後的陣列元素為:"

<

for(

int i=

0;i<

8;i++

) cout<

<<

" ";

cout<

v.erase

(new_it,it+8)

; cout<<

"刪除重複元素後的陣列元素為:"

<

for(

int i=

0;isize()

;i++

) cout<

<<

" ";

cout<

}

輸出結果為:

lower_bound函式和upper_bound函式

相同點:都是通過二分查詢在乙個排好序的陣列中實現的(預設是公升序排列)

不同點:

lower_bound函式是查詢陣列中第乙個大於或等於給定值的元素,找到之後返回該元素的位址。沒找到則返回end

upper_bound函式是查詢陣列中第乙個大於給定值的元素,找到之後返回該元素的位址。沒找到返回end

( lower_bound(num,num+8,4)-num 後面減去num得到的是找到的元素的下標,因為陣列名也是指向陣列第乙個元素的指標嘛~ )

由於兩個函式都是預設公升序排列,以下**是可以的:

#include

#include

using

namespace std;

intmain()

;//公升序

cout<<

lower_bound

(num,num+8,

4)-num<

//輸出:4

cout<<

upper_bound

(num,num+8,

4)-num<

//輸出:7

cout<<

lower_bound

(num,num+8,

6)-num<

//輸出:7

cout<<

upper_bound

(num,num+8,

6)-num<

//輸出:8

cout<<

lower_bound

(num,num+8,

0)-num<

//輸出:0

cout<<

upper_bound

(num,num+8,

0)-num<

//輸出:0

}

然而如果陣列降序排列,由於兩個函式都是用二分查詢,假如在陣列中查詢4,二分查詢mid指向3,發現3小於4,則要向右半部分查詢,然而降序排列右半部分的元素肯定小於等於3,因此找不到4,只能返回end

**如下:

#include

#include

using

namespace std;

intmain()

;//降序

cout<<

lower_bound

(a,a+8,

4)-a<

//輸出:8

cout<<

upper_bound

(a,a+8,

4)-a<

//輸出:8

cout<<

lower_bound

(a,a+8,

6)-a<

//輸出:8

cout<<

upper_bound

(a,a+8,

6)-a<

//輸出:8

cout<<

lower_bound

(a,a+8,

0)-a<

//輸出:0

cout<<

upper_bound

(a,a+8,

0)-a<

//輸出:0

}

當陣列為降序的時候,也可以使用這兩個函式,需要對這兩個函式進行過載:

lower_bound

( begin,end,num,greater()

)//查詢第乙個小於等於num的元素

upper_bound

( begin,end,num,greater()

)//查詢第乙個小於num的元素

舉個例子:

#include

#include

using

namespace std;

intmain()

;//降序

cout<<

lower_bound

(a,a+8,

4,greater<

int>()

)-a<

//輸出:1

cout<<

upper_bound

(a,a+8,

4,greater<

int>()

)-a<

//輸出:4

cout<

}

STL之string函式整理

stl的string容器使用很多,常常忘記一些函式的用法,決定邊用邊整理起來。首先使用條件是include庫 string s1 abcdefg 用字串的值初始化s1 string s2 s1 拷貝建構函式生成s1的副本s2 string s3 s1,index 將s1中從index的位置後的字串作...

STL 簡單整理

stl include multisetnum 定義 multiset iterator it 迭代器 num.insert b 插入 num.erase num.find b 刪除 查詢 num.erasr pos pos位資料 num.erasr beg,end 區間刪除 num.count b...

STL 整理唱片

problem g stl 整理唱片time limit 1 sec memory limit 128 mbsubmit 6303 solved 1778 submit status description小明有乙個書架,但是他卻用它放了許多唱片。但是他的習慣很不好,唱片胡亂擺放。於是他決定整理一下...