list鍊錶2 操作函式和查詢

2021-08-22 10:39:12 字數 2568 閱讀 4406

1.1 查

1)輸出全部元素:迴圈、for_each()

2)輸出單個元素:front()返回頭元素,back()返回尾部元素

!!!不支援下標運算和at()函式

例項**:

listlis1(5, 8);

list::iterator ite;

ite = lis1.begin();

//迭代器迴圈,迭代器可以++、--但不能進行加法運算

for (; ite != lis1.end(); ite++)

cout << "\n";

for_each(lis1.begin(), lis1.end(), out);

cout << "\n";

//返回鍊錶的第乙個元素

cout << lis1.front() << endl;

//返回鍊錶的最後乙個元素

cout << lis1.back() << endl;

執行結果:

1.2 增

1)頭增加乙個元素:push_front(val);

2)尾部增加乙個元素:push_back(val);

3)中間插入乙個元素:

insert(ite, val);  //在鍊錶的ite位置插入乙個值為val的元素

insert(ite, num, val);   //在鍊錶的ite位置插入num個值為val的元素

insert(ite, lis2.begin(), lis2.end());  //在鍊錶的ite位置插入lis2鍊錶的部分元素

listlis1(5, 8);

listlis2(5, 6);

list::iterator ite1;

list::iterator ite2;

ite1 = lis1.begin();

ite2 = lis2.begin();

lis1.push_front(1);

//在鍊錶lis1的頭部新增乙個元素1

lis1.push_back(4);

//在鍊錶lis1的尾部新增乙個元素4

for_each(lis1.begin(), lis1.end(), out);

cout << "\n";

ite1++;

ite1++;

lis1.insert(ite1, 3);

//在鍊錶lis1的ite1的位置處插入乙個元素3

for_each(lis1.begin(), lis1.end(), out);

cout << "\n";

lis1.insert(ite1, 3, 2);

//在鍊錶lis1的ite1的位置處插入3個元素2

for_each(lis1.begin(), lis1.end(), out);

cout << "\n";

ite2++;

ite2++;

ite2++;

lis1.insert(ite1, ite2, lis2.end());

//在鍊錶lis1的ite1的位置處插入鍊錶lis2從ite2開始到末尾的元素

for_each(lis1.begin(), lis1.end(), out);

cout << "\n";

執行結果:

結果分析:

首先在鍊錶的頭部和尾部新增乙個1和乙個4,這沒有什麼說的;在向鍊錶lis1插入元素需注意迭代器指向的位置,同時與vector和string不同的是,list的迭代器不會失效,開始定義ite1指向lis1的第乙個元素8,雖然頭部已增加乙個元素1了,但是迭代器還是指向的原始鍊錶中的第1個8的位置,ite1自加兩次,指向lis1的第3個8的位置處,在此位置插入元素3,因為插入了乙個元素,ite1迭代器也向後移動了一位,指向元素3後面的那個8的位置處,然後插入3個元素2,迭代器移動3位到2後面那個8的位置處了,再插入2個元素6,此時迭代器移到了6後面的那個8的位置處了

1.3 刪

1)頭部刪除:pop_front();

2)尾部刪除:pop_back();

3)刪除指定的元素:erase();

erase(ite);   //刪除乙個

erase(ite0, ite1);  //刪除一段

4)刪除全部元素:clear();

5)刪除所有引數相同的元素:remove(val);

6)刪除鍊錶中重複的元素:unique();

鍊錶和list

一 stl 的 list 是資料結構的雙向鍊錶,它的記憶體空間可以是不連續的,通過指標來進行資料的訪問,它可以高效率地在任何地方刪除和插入,插入和刪除操作是常數時間的。二 list 和 vector 的優缺點正好相反,它們的應用場景不同。1 vector 插入和刪除操作少,隨機訪問元素頻繁 2 li...

list 鍊錶函式(小結)

先上函式 include include include include include includeusing namespace std struct node typedef struct node list list head null list current null,pre null...

Redis學習 2 鍊錶(list)

鍊錶的使用十分廣泛,甚至很多高階程式語言都內建了這種資料結構。但是c語言卻不沒有。不過c語言編寫的redis卻自己構建了鍊錶這種資料結構在自己內部。127.0.0.1 6379 lpush list a b c d e 向鍊錶中新增a b c d e f integer 5 此時鍊錶中的資料個數 1...