C++ STL之slist單向鏈表容器使用方式
slist為單向鏈表的泛化容器,與list雙向鏈表容器一樣,實現了線性表數據的鏈表存儲,數據元素不必在物理內存中連續(xù)分布。
slist鏈表的節(jié)點,只有后繼的指針,不含前驅的指針。因此,在節(jié)省前驅指針的存儲空間的同時,也就不再支持迭代器的反向移動。
1.slist技術原理
slist內部的鏈表由頭指針、頭節(jié)點和元素節(jié)點組成,每個節(jié)點含有指向后繼節(jié)點的指針,最后一個節(jié)點的指針為null,可見slist沒有形成一個環(huán)形回路。

頭節(jié)點一般不存儲數據,為了使各個元素節(jié)點都有前驅節(jié)點的指針指向它以便能夠不加區(qū)別的對第一個元素節(jié)點和其他元素節(jié)點進行統(tǒng)一處理,所以構造頭節(jié)點。
2.slist應用基礎
list對象的創(chuàng)建和vector一樣,不多解釋。元素的刪除、歸并、排序與list相同。
2.1初始化賦值和遍歷
通常使用push_front函數進行初始化,由于slist的頭節(jié)點僅有一個指針域保存首元素地址,而沒有存放最后一個元素的地址,因此slist沒有提供類似的push_back函數能夠在容器尾部添加元素。
push_front函數在鏈表首元素前面,插入一個新元素,使之成為首元素。
遍歷slist和list一樣,只能使用迭代器進行遍歷,而不能使用數組下標的形式。
#include <QList> //在qt中QList就是單向鏈表,用法和slist相同
#include <QCoreApplication>
#include<QString>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QList<int> s;
s.push_front(11); //在首元素插入11
s.push_front(23); //在11前面插入23,即現在23為首元素
s.push_front(39); // 在首元素23之前插入39,即39,23,11
QList<int>::iterator i,iend;
iend=s.end();
for(i=s.begin();i!=iend;i++)
{
cout << *i << " ";
}
cout << endl;
return a.exec();
}
運行結果:

2.2元素的插入
對于任意位置上的slist鏈表元素的插入,可使用insert_after和insert函數,insert_after函數直接在指定的pos位置后插入新元素。
insert則從單向鏈表的頭節(jié)點開始,找到pos的前驅位置,然后調用insert_after函數進行插入,因此執(zhí)行效率比較低。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Qt 中 isHidden 和 isVisible 的區(qū)別與使用小結
Qt 中的 isHidden() 和 isVisible() 方法都用于查詢組件顯示或隱藏狀態(tài),然而,它們有很大的區(qū)別,了解它們對于正確操作組件致關重要,下面給大家介紹Qt 中 isHidden 和 isVisible 的區(qū)別與使用,感興趣的朋友一起看看吧2025-03-03

