list 的每個節點有三個域:前驅元素指針域、數據域和后繼元素指針域。由于 list 對象的節點并不要求在一段連續的內存中,所以,對于迭代器,只能通過“++” 或“- -”的操作將迭代器移動到后繼/前驅節點元素處。而不能對迭代器進行+n 或-n 的操作,這點,是與vector 等不同的地方。頭文件:#include <list>創建list 對象(1)創建空鏈表,如:list<int> l;(2)創建具有n 個元素的鏈表,如:list<int> l(10); //創建具有10 個元素的鏈表有三種方法往鏈表里插入新元素:(1)采用push_back()方法往尾部插入新元素,鏈表自動擴張。(2)采用push_front()方法往首部插入新元素,鏈表自動擴張。(3)采用insert()方法往迭代器位置處插入新元素,鏈表自動擴張。l.push_back(2);l.push_back(1);l.push_back(5);//在鏈表頭部插入新元素,鏈表自動擴張l.push_front(8);//在任意位置插入新元素,鏈表自動擴張list<int>::iterator it;it=l.begin();it++;//注意,鏈表的迭代器只能進行++或--操作,而不能進行+n 操作l.insert(it,20);//使用前向迭代器遍歷鏈表輸出:8 20 2 1 5反向遍歷:list<int>::reverse_iterator rit;for(rit=l.rbegin();rit!=l.rend();rit++){cout<<*rit<<" ";}元素刪除(1)可以使用remove()方法刪除鏈表中一個元素,值相同的元素都會被刪除。//刪除值等于1 的所有元素l.remove(1);(2)使用pop_front()方法刪除鏈表首元素,使用pop_back()方法刪除鏈表尾元素。l.pop_front();//刪除尾元素l.pop_back();//遍歷鏈表(3)使用erase()方法刪除迭代器位置上的元素。//刪除第2 個元素(從0 開始計數)it=l.begin();it++;it++;l.erase(it);(4)使用clear()方法清空鏈表。//清空鏈表l.clear();元素查找采用 find()查找算法可以在鏈表中查找元素,如果找到該元素,返回的是該元素的迭 代器位置;如果沒有找到,則返回end()迭代器位置。記得加頭文件:#include <algorithm>//采用find()查找算法在鏈表中查找it=find(l.begin(),l.end(),5);if(it!=l.end())//找到{cout<<"find it"<<endl;}元素排序://使用sort()方法對鏈表排序,是升序排列l.sort();剔除連續重復元素采用 unique()方法可以剔除連續重復元素,只保留一個。//剔除連續重復元素(只保留一個)l.unique();例如:原來list中是2 8 1 1 1 5 1剔除后剩下:2 8 1 5 1新聞熱點
疑難解答