乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       木三水0vosidma 2019-05-06

      set容器的使用詳解

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


      set當(dāng)中不能存儲相同的鍵值(set還具有強(qiáng)迫癥). 其實(shí)map和set的區(qū)別差不多就完了. 他們的相同點(diǎn),他們底層都是使用紅黑樹構(gòu)造的


      這使得他們的查找,插入,刪除的效率都非常的高. 并且他們都是有序的,這些都非常關(guān)鍵! 這是一個好的容器的標(biāo)準(zhǔn).當(dāng)然set的禁忌


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


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


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


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


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


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



      set相關(guān)函數(shù)



       

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

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

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

      clear 清除set的所有元素。

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

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

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

      emplace 將就地構(gòu)造的元素插入到set。

      emplace_hint 將就地構(gòu)造的元素插入到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 


      因?yàn)檫@里的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ū)間進(jìn)行插入

       

       set<int> OtherSet2;

       

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

       

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

       it1 = OtherSet2.begin();

       

       while (it1 != OtherSet2.end())

       

       {

        cout << *it1 << " ";

        ++it1;

       }

       cout << endl;



      運(yùn)行結(jié)果:




      刪除操作:



      代碼演示:


       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é)點(diǎn)迭代器然后刪除節(jié)點(diǎn)

       

       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結(jié)束這段區(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;


      運(yùn)行結(jié)果:








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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多