list 的每個(gè)節(jié)點(diǎn)有三個(gè)域:前驅(qū)元素指針域、數(shù)據(jù)域和后繼元素指針域。由于 list 對象的節(jié)點(diǎn)并不要求在一段連續(xù)的內(nèi)存中,所以,對于迭代器,只能通過“++” 或“- -”的操作將迭代器移動到后繼/前驅(qū)節(jié)點(diǎn)元素處。而不能對迭代器進(jìn)行+n 或-n 的操作,這點(diǎn),是與vector 等不同的地方。頭文件:#include <list>創(chuàng)建list 對象(1)創(chuàng)建空鏈表,如:list<int> l;(2)創(chuàng)建具有n 個(gè)元素的鏈表,如:list<int> l(10); //創(chuàng)建具有10 個(gè)元素的鏈表有三種方法往鏈表里插入新元素:(1)采用push_back()方法往尾部插入新元素,鏈表自動擴(kuò)張。(2)采用push_front()方法往首部插入新元素,鏈表自動擴(kuò)張。(3)采用insert()方法往迭代器位置處插入新元素,鏈表自動擴(kuò)張。l.push_back(2);l.push_back(1);l.push_back(5);//在鏈表頭部插入新元素,鏈表自動擴(kuò)張l.push_front(8);//在任意位置插入新元素,鏈表自動擴(kuò)張list<int>::iterator it;it=l.begin();it++;//注意,鏈表的迭代器只能進(jìn)行++或--操作,而不能進(jìn)行+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()方法刪除鏈表中一個(gè)元素,值相同的元素都會被刪除。//刪除值等于1 的所有元素l.remove(1);(2)使用pop_front()方法刪除鏈表首元素,使用pop_back()方法刪除鏈表尾元素。l.pop_front();//刪除尾元素l.pop_back();//遍歷鏈表(3)使用erase()方法刪除迭代器位置上的元素。//刪除第2 個(gè)元素(從0 開始計(jì)數(shù))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(wèi).sort();剔除連續(xù)重復(fù)元素采用 unique()方法可以剔除連續(xù)重復(fù)元素,只保留一個(gè)。//剔除連續(xù)重復(fù)元素(只保留一個(gè))l.unique();例如:原來list中是2 8 1 1 1 5 1剔除后剩下:2 8 1 5 1新聞熱點(diǎn)
疑難解答
圖片精選