黑馬C++視頻筆記《STL之list》

鏈表
/* list容器
 * list(鏈表)是一種物理存儲單元上非連續(xù)的儲存結構己肮,數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接實現(xiàn)的.
 * 鏈表中的每一個結點包含數(shù)據(jù)域和指針域士袄,數(shù)據(jù)域儲存數(shù)據(jù),指針域儲存下一個結點的地址.
 * STL中的鏈表是一個雙向循環(huán)鏈表谎僻,由于鏈表的儲存方式不是連續(xù)的內存空間娄柳,因此鏈表list中的迭代器只支持前移和后移,
 * 屬于雙向迭代器艘绍,不支持隨機訪問.
 *
 * 優(yōu)點: 可以對任意結點進行快速插入和刪除元素赤拒;動態(tài)非配內存,不會造成內存浪費與溢出;
 * 缺點: 遍歷速度慢,占用空間大.
 *
 * list有一個重要性質挎挖,插入和刪除操作都不會造成原有l(wèi)ist迭代器的失效这敬,這在vector是不成立的.
 *
 *
 * 構造函數(shù):
 *  - `list<T> lst;`,默認構造形式蕉朵;
 *  - `list(begin, end);`崔涂,構造函數(shù)將[begin, end)區(qū)間內的數(shù)據(jù)拷貝給自身;
 *  - `list(n, elem);`始衅,構造函數(shù)將n個elem拷貝給本身冷蚂;
 *  - `list(const list &lst);`,拷貝構造函數(shù)汛闸;
 *
 * 賦值與交換:
 *  - `assign(begin, end);`蝙茶,將[begin, end)區(qū)間中的數(shù)據(jù)拷貝賦值給本身;
 *  - `assign(n, elem);`诸老,將n個elem賦值給本身隆夯;
 *  - `list& operator=(const list &lst);`,重載等號運算符别伏;
 *  - `swap(lst);`蹄衷,將lst與本身交換元素。
 *
 * 大小操作:
 *  - `size();`畸肆,返回容器中元素的個數(shù)宦芦;
 *  - `empty();`,判斷容器是否為空轴脐;
 *  - `resize(num);`,重新指定容器的長度為num抡砂,若容器變長大咱,則以默認值填充新位置;若容器變短注益,則刪除尾部多余元素碴巾;
 *  - `resize(num, elem);`,重新指定容器的長度為num丑搔,若容器變長則以elem值填充新位置厦瓢;若容器變短,則刪除尾部多余元素啤月;
 *
 * 插入與刪除:
 *  - `push_back(elem);`煮仇,在容器尾部加入一個元素;
 *  - `pop_back();`谎仲,刪除list最后一個元素浙垫;
 *  - `push_front(elem);`,在list頭部插入一個元素;
 *  - `pop_front();`夹姥,刪除list頭部第一個元素杉武;
 *  - `insert(iterator_pos, elem);`,在pos位置插入elem元素的拷貝辙售,返回新數(shù)據(jù)的位置轻抱;
 *  - `insert(iterator_pos, n, elem);`,在pos位置插入n個elem數(shù)據(jù)旦部,無返回值祈搜;
 *  - `insert(iterator_pos, beg, end);`,在pos位置插入[beg, end)區(qū)間的數(shù)據(jù)志鹃,無返回值夭问;
 *  - `clear();`,移除list的所有數(shù)據(jù)曹铃;
 *  - `erase(beg, end);`缰趋,刪除[beg, end)區(qū)間內的數(shù)據(jù),返回下一個數(shù)據(jù)的位置陕见;
 *  - `erase(iterator_pos);`秘血,刪除pos位置的數(shù)據(jù),返回下一個數(shù)據(jù)的位置评甜;
 *  - `remove(elem);`灰粮,刪除list中值為elem的元素;
 *
 * 數(shù)據(jù)存热炭馈:
 *  - `front();`粘舟,返回第一個元素;
 *  - `back();`佩研,返回最后一個元素柑肴;
 * 由于list不是連續(xù)線性空間儲存數(shù)據(jù),因此不可以使用[]或at訪問數(shù)據(jù).
 *
 * 反轉與排序:
 *  - `reverse();`旬薯,反轉鏈表晰骑;
 *  - `sort();`,鏈表排序, 需要使用容器內提供的算法lst.sort(), 而不能使用algorithm中提供的sort(lst.begin(), lst.end()).
 *
 * 注:不支持隨機訪問的容器均不能使用algorithm中的sort算法绊序,只能使用容器內部提供的sort算法.
 */

一個??:

 /* 排序案例
  * 案例描述:將Person自定義數(shù)據(jù)類型進行排序硕舆,Person中屬性有姓名、年齡骤公、身高抚官;
  * 排序規(guī)則:按照年齡進行升序,如果年齡相同按照身高進行降序.
  */

#include <iostream>
#include <string>
#include <list>
#include <ctime>

using namespace std;


class Persons{
 public:
     Persons(string name, int age, int height){
         this->m_age = age;
         this->m_name = name;
         this->m_height = height;
     }

     string m_name;
     int m_age;
     int m_height;
 };

 // 指定排序規(guī)則, 倒序
 bool pCompare(const Persons &p1, const Persons &p2){
     if (p1.m_age>p2.m_age){
         return true;
     }
     else if(p1.m_age==p2.m_age){
         if (p1.m_height>p2.m_height){
             return true;
         }else{
             return false;
         }
     }
 }

 int main(){
     list<Persons> lst;

     // 往容器中添加人
     srand((unsigned)time(NULL));
     string names="ABCDE";
     for (string::iterator it=names.begin(); it!=names.end(); it++){
         int age = rand()%100;
         int height = rand()%100 + 100;
         string name = "姓名";
         name+=(*it);
         Persons p(name, age, height);
         lst.push_back(p);
     }

     cout << "排序前:" << endl;
     for (list<Persons>::iterator it=lst.begin(); it!=lst.end(); it++){
         cout << "Name: " << it->m_name
            << " Age: " << it->m_age
            << " Height: " << it->m_height << endl;
     }

     cout << "排序后: " << endl;

     lst.sort(pCompare);
     for (list<Persons>::iterator it=lst.begin(); it!=lst.end(); it++){
         cout << "Name: " << it->m_name
              << " Age: " << it->m_age
              << " Height: " << it->m_height << endl;
     }

 }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末淋样,一起剝皮案震驚了整個濱河市耗式,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖刊咳,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彪见,死亡現(xiàn)場離奇詭異,居然都是意外死亡娱挨,警方通過查閱死者的電腦和手機余指,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跷坝,“玉大人酵镜,你說我怎么就攤上這事〔褡辏” “怎么了淮韭?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長贴届。 經常有香客問我靠粪,道長,這世上最難降的妖魔是什么毫蚓? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任诗箍,我火速辦了婚禮扛芽,結果婚禮上淹禾,老公的妹妹穿的比我還像新娘柴墩。我一直安慰自己,他們只是感情好翩概,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布牲距。 她就那樣靜靜地躺著,像睡著了一般钥庇。 火紅的嫁衣襯著肌膚如雪嗅虏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天上沐,我揣著相機與錄音,去河邊找鬼楞艾。 笑死参咙,一個胖子當著我的面吹牛,可吹牛的內容都是我干的硫眯。 我是一名探鬼主播蕴侧,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼两入!你這毒婦竟也來了净宵?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎择葡,沒想到半個月后紧武,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡敏储,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年阻星,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片已添。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡妥箕,死狀恐怖,靈堂內的尸體忽然破棺而出更舞,到底是詐尸還是另有隱情畦幢,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布缆蝉,位于F島的核電站宇葱,受9級特大地震影響,放射性物質發(fā)生泄漏返奉。R本人自食惡果不足惜贝搁,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芽偏。 院中可真熱鬧雷逆,春花似錦、人聲如沸污尉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽被碗。三九已至某宪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锐朴,已是汗流浹背兴喂。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留焚志,地道東北人衣迷。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像酱酬,于是被迫代替她去往敵國和親壶谒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內容