日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Chapter9:顺序容器

發布時間:2023/12/18 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Chapter9:顺序容器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

現代C++程序應該使用標準庫容器,而不是更原始的數據結構,例如內置數組。

新標準庫容器的性能幾乎肯定與最精心優化過的同類數據結構一樣好。

當我們用一個對象來初始化容器時,或將一個對象插入到容器中時,實際上放入到容器中的是對象值的拷貝,而不是對象本身。

?

  • 容器選擇原則
  • 除非你有很好的理由選擇其他容器,否則應使用vector;
  • 如果你的程序有很多小的元素,且空間的額外開銷很重要,則不要使用list或forward_list;
  • 如果程序要求隨機訪問元素,應使用vector或deque;
  • 如果程序需要在頭尾位置插入或刪除元素,而不會再中間位置插入或刪除,使用deque;
  • 如果程序只有在讀取輸入時才需要在中間位置插入元素,隨后需要隨機訪問元素,則:
    • 首先確定是否真的需要在容器中間位置添加元素。(可以在vector中追加數據,然后sort重排)
    • 如果必須添加元素,則考慮輸入階段使用list;一旦完成,將list的內容copy到一個vector中。

    ?Best Practice:如果不確定應該使用哪種容器,那么可以在程序中只使用vector和list的公共操作:使用迭代器。不使用下標操作,避免隨機訪問。

    ?

    ?

    為了創建一個容器為另一個容器的拷貝,兩個容器的類型及其元素類型必須匹配。不過,當傳遞迭代器參數來拷貝一個范圍時,就不要求容器類型是相同的了,而且元素類型可以轉換即可。

    1 list<string> authors = { "Milton","Shakespeare","Austen" }; 2 vector<const char*> articles = { "a", "an","the" }; 3 4 list<string> list2(authors);//正確 5 vector<string> authors2(authors);//錯誤,容器類型不匹配 6 list<string> words(articles.begin(), articles.end());//正確 7 list<const string> ls(authors);//錯誤

    ?

    ?

    雖然內置數組不能進行copy或者對象賦值工作,但array并沒有這種限制。

    由于右邊運算對象的大小可能與左邊運算對象的大小不同,因此array類型不支持assign,也不允許用花括號列表來賦值(但是可以初始化)

    1 array<int, 4> digits = { 0,1,2,3 }; 2 array<int, 4> copy = digits;//正確 3 4 array<int, 4> a1 = { 0,1,2,3 }; 5 a1 = { 0,1,2,3 };//錯誤

    ?

    ?

    swap:除array外,交換兩個容器內容的操作會很快——元素本身并未交換,swap只是交換兩個容器的內部數據結構。swap兩個array會真正交換它們的元素。

    ?

    ?

    • 向容器中插入/刪除元素

    push_back(t), push_front(t),返回void;

    insert(p,t), insert(p,n,t), insert(p,b,e), insert(p,il) 實在迭代器p元素之前插入元素,返回指向新添加的(第一個)元素的迭代器。

    emplace_front(args), emplace_back(args),emplace(p,args)這些操作構造而不是拷貝元素。是將參數傳遞給元素類型的構造函數。emplace成員使用這些參數在容器管理的內存空間中直接構造元素。而調用push_back則會創建一個局部臨時對象,并將其壓入容器中。

    ?

    ?

    • 刪除元素

    pop_back(), pop_front(), clear()返回void;

    erase(p),erase(b,e)刪除元素,返回一個指向(最后)被刪元素之后元素的迭代器;

    ?

    ?

    • forward_list

    沒有簡單辦法來獲得前驅,所以其刪除/插入都是after版本。

    insert_after(p,t),insert_after(p,n,t),insert_after(p,b,e),insert_after(p,il),emplace_after(p,args)在迭代器p之后插入元素,返回一個指向最后一個插入元素的迭代器

    erase_after(p), erase_after(b,e)刪除p指向的位置之后的元素,返回一個指向北山元素之后元素的迭代器。

    ?

    ?

    • string的數值轉換

    新標準引入了多個函數,可以實現數值數據與標準庫string之間的轉換

    to_string(val),

    stoi/stoul/stol/stoll/stoull(s,p,b):返回s起始子串(表示整數部分)的數值,b表示基數,默認為10。P是size_t指針,用來保存s第一個非數值字符的下標。

    stof/stod/stold(s,p)

    ?

    轉載于:https://www.cnblogs.com/wangyanphp/p/5794943.html

    總結

    以上是生活随笔為你收集整理的Chapter9:顺序容器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。