久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

STL--set容器的使用詳解 插入,、刪除

 木三水0vosidma 2019-05-06

set容器的使用詳解

其實map和set是一個爸爸 - 紅黑樹爸爸,,只不過set力氣不夠,不像map那么可以擁有一個主鍵(key)和實鍵(value).它只有一個鍵值并且


set當中不能存儲相同的鍵值(set還具有強迫癥). 其實map和set的區(qū)別差不多就完了. 他們的相同點,,他們底層都是使用紅黑樹構造的


這使得他們的查找,,插入,刪除的效率都非常的高. 并且他們都是有序的,,這些都非常關鍵,! 這是一個好的容器的標準.當然set的禁忌


也和map一樣,set不能存儲無法比較大小的數(shù)據(jù). 因為構建紅黑樹需要比較大小. 而且在set中存儲相同的鍵值 ,,新的就會覆蓋久的.


set的特性是,,所有元素都會根據(jù)元素的鍵值自動被排序. 我們可以通過set的迭代器改變set的元素值嗎? 不行,,因為set元素值就是其鍵


值,,關系到set元素的排列規(guī)則,如果任意改變set元素值,,會嚴重破壞set組織. set的源代碼之中看到,,set<T>::iterator被定義為底層RB_


tree的const_iterator,杜絕寫入操作. 換句話說,,set iterator是一種constant iterator(相對于mutable iterator).


set擁有與list相同的某些性質: 當客戶端對它進行元素新增操作或刪除操作時,,操作之前的所有迭代器,在操作完成之后都依然有效,,當然


那個被刪除元素迭代器必然是個例外.



set相關函數(shù)



 

begin 返回一個迭代器,,此迭代器指向set中的第一個元素,。

cbegin 返回一個常量迭代器,此迭代器指向set中的第一個元素,。

cend 返回一個迭代器,,此迭代器指向set最后一個元素的下一個位置

clear 清除set的所有元素。

crbegin 返回一個常量迭代器,,此迭代器指向反向set中的第一個元素,。

crbegin 返回一個常量迭代器,此迭代器指向反向set中的第一個元素,。

crend 返回一個常量迭代器,,此迭代器指向反向set中最后一個元素之后的位置。

emplace 將就地構造的元素插入到set,。

emplace_hint 將就地構造的元素插入到set,,附帶位置提示。

empty 如果set為空,,則返回 true,。

end 返回一個迭代器,此迭代器指向set最后一個元素的下一個位置

erase 從指定位置移除set中的元素或元素范圍,。

   

find 返回一個迭代器,,此迭代器指向set中其鍵與指定鍵相等的元素的位置。

get_allocator 返回集合中與給定值相等的上下限的兩個迭代器.

insert 將元素或元素范圍插入到set中的指定位置,。

key_comp 將返回一個用于元素鍵值比較的函數(shù)

lower_bound 返回一個迭代器,,此迭代器指向set中其鍵值等于或大于指定鍵的鍵值的第一個元素。

max_size 返回set的最大長度,。

rbegin 返回一個迭代器,,此迭代器指向反向set中的第一個元素。

rend 返回一個迭代器,,此迭代器指向反向set中最后一個元素之后的位置,。

size 返回set中的元素數(shù)量。

swap 交換兩個set的元素,。

upper_bound 返回一個迭代器,,此迭代器指向set中其鍵值大于指定鍵的鍵值的第一個元素。

   

   

   


訪問操作:


這里我們需要掌握的函數(shù)有:begin,end,find,cbegin,cend.rbegin,rend,empty 


因為這里的rbegin,rend,cbegin.cend用法和begin和end用法相同,,所以我們這里使用begin作為示范.


插入操作:


 set<int> T;

 

 

 //***1*** 最普通的插入方式

 T.insert(2);

 T.insert(3);

 T.insert(4);

 T.insert(5);

 T.insert(6);

 //插入元素

 

 cout << "遍歷T的元素: " << " ";

 set<int>::iterator it1 = T.begin();

 

 while (it1 != T.end())

 {

  cout << *it1 << " ";

  ++it1;

 }

 cout << endl;

 

 //***2*** 利用數(shù)組集合插入

 set<int> OtherSet;

 int arr[10] = { 1, 2, 3, 4, 5 };

 OtherSet.insert(arr, arr + 3);

 

 cout << "遍歷OtherSet的元素: " << " ";

 it1 = OtherSet.begin();

 

 while (it1 != OtherSet.end())

 

 {

  cout << *it1 << " ";

  ++it1;

 }

 cout << endl;

 

 //***3*** 利用迭代器區(qū)間進行插入

 

 set<int> OtherSet2;

 

 OtherSet2.insert(T.begin(), T.end());

 

 cout << "遍歷OtherSet的元素: " << " ";

 it1 = OtherSet2.begin();

 

 while (it1 != OtherSet2.end())

 

 {

  cout << *it1 << " ";

  ++it1;

 }

 cout << endl;



運行結果:




刪除操作:



代碼演示:


 set<int> T;

 int arr[10] = { 1, 2, 3, 4, 6, 7 };

 

 T.insert(arr, arr + 6);

 

 cout << "遍歷T的元素: " << " ";

 set<int>::iterator it1 = T.begin();

 

 while (it1 != T.end())

 

 {

  cout << *it1 << " ";

  ++it1;

 }

 cout << endl;

 

 

 //***1*** 找到節(jié)點迭代器然后刪除節(jié)點

 

 set<int>::iterator it2 = T.find(2);

 //先找到鍵值為2的迭代器,,然后刪除該迭代器.

 

 T.erase(it2);

 

 cout << "遍歷T的元素: " << " ";

 it1 = T.begin();

 

 while (it1 != T.end())

 

 {

  cout << *it1 << " ";

  ++it1;

 }

 cout << endl;

 

 //***2*** 刪除一個迭代器區(qū)間

 it2 = T.find(3);

 

 T.erase(it2, T.end());

 //刪除3到set結束這段區(qū)間的所有元素.

 

 cout << "遍歷T的元素: " << " ";

 it1 = T.begin();

 

 while (it1 != T.end())

 

 {

  cout << *it1 << " ";

  ++it1;

 }

 cout << endl;

 

 //***3*** 終極大招 clear

 

 T.clear();

 

 cout << "遍歷T的元素: " << " ";

 it1 = T.begin();

 

 while (it1 != T.end())

 

 {

  cout << *it1 << " ";

  ++it1;

 }

 cout << endl;


運行結果:








    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內容,,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多