国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++】STL---list基本用法介紹

這篇具有很好參考價值的文章主要介紹了【C++】STL---list基本用法介紹。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

個人主頁:平行線也會相交??
歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 平行線也會相交 原創(chuàng)
收錄于專欄【C++之路】??
本專欄旨在記錄C++的學(xué)習(xí)路線,望對大家有所幫助???
希望我們一起努力、成長,共同進(jìn)步。??
【C++】STL---list基本用法介紹,C++之路,c++,list

list是STL中的一種容器,底層其實就是一個雙向鏈表。

既然底層實現(xiàn)是雙向鏈表,所以list重要的一點就是插入和刪除操作的時間復(fù)雜度為常數(shù)時間O(1),這是因為鏈表的結(jié)構(gòu)不需要像數(shù)組一樣進(jìn)行內(nèi)存重排。

當(dāng)然,如果要頻繁訪問鏈表中的元素,需要沿著鏈表進(jìn)行遍歷,這導(dǎo)致list容器訪問操作的時間復(fù)雜度為O(n)。
【C++】STL---list基本用法介紹,C++之路,c++,list

下面將對list中的常見的用法進(jìn)行一一介紹。

一、創(chuàng)建變量

下面鏈表變量的創(chuàng)建:

list<int> it1;//創(chuàng)建一個空的list
list<int> it2 = { 1,2,3,4,5 };//創(chuàng)建一個帶有初始元素的list

二、增刪查改

1??插入元素

插入元素總共分為三種:尾插、頭插、任意位置插入。
尾插(push_back()):

list<int> lt1;
lt1.push_back(1);
lt1.push_back(2);

頭插(push_front()):

list<int> lt1;
lt1.push_front(1);
lt1.push_front(2);

任意位置插入刪除(insert()):

//在第三個位置進(jìn)行插入10
list<int> lt1;
lt1.push_back(1);
lt1.push_back(2);
lt1.push_back(3);
lt1.push_back(4);
list<int>::iterator it = lt1.begin();
for (size_t i = 0; i < 2; i++)
{
	it++;
}
lt1.insert(it, 10);
for (auto e : lt1)
{
	cout << e << " ";
}
cout << endl;

【C++】STL---list基本用法介紹,C++之路,c++,list

2??刪除

//刪除的節(jié)點中數(shù)據(jù)為3的節(jié)點
list<int> lt1;
lt1.push_back(1);
lt1.push_back(2);
lt1.push_back(3);
lt1.push_back(4);
for (auto e : lt1)
{
	cout << e << " ";
}
cout << endl;

list<int>::iterator it = lt1.begin();
it = find(lt1.begin(), lt1.end(), 3);
//判斷是否查找成功
if (it != lt1.end())
{
	lt1.erase(it);
	//節(jié)點此時已經(jīng)被刪除了,當(dāng)前的迭代器失效
	//*it *= 10;
}
for (auto e : lt1)
{
	cout << e << " ";
}
cout << endl;

【C++】STL---list基本用法介紹,C++之路,c++,list

下面來刪除list中的偶數(shù)元素:

list<int> lt1;
	lt1.push_back(1);
	lt1.push_back(2);
	lt1.push_back(3);
	lt1.push_back(4);

	list<int>::iterator it = lt1.begin();
	while (it != lt1.end())
	{
		if (*it % 2 == 0)
		{
			it = lt1.erase(it);
		}
		else
		{
			it++;
		}
	}
	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;

【C++】STL---list基本用法介紹,C++之路,c++,list

3??查找和修改

這里我們需要注意一點:std::list沒有提供內(nèi)置的find()函數(shù)

原因主要有兩點:
第一遍歷代替索引訪問:由于std::list是一個雙向鏈表,不支持通過索引來直接訪問元素。相反,要訪問或查找元素,需要使用迭代器進(jìn)行迭代操作。

第二:鏈表的特點是插入和刪除元素的時間復(fù)雜度為O(1),但訪問元素的時間復(fù)雜度為O(n),其中n是鏈表長度。相比之下,std::vector的訪問時間復(fù)雜度為O(1)。由于鏈表不支持快速隨機(jī)訪問,使用線性搜索遍歷整個鏈表可能是更高效的操作。

舉例:

//在鏈表中查找節(jié)點中數(shù)據(jù)為3的節(jié)點,如果查找成功,將該數(shù)據(jù)的數(shù)據(jù)*10
list<int> lt1;
lt1.push_back(1);
lt1.push_back(2);
lt1.push_back(3);
lt1.push_back(4);
for (auto e : lt1)
{
	cout << e << " ";
}
cout << endl;

list<int>::iterator it = lt1.begin();
it = find(lt1.begin(), lt1.end(), 3);
//判斷是否查找成功
if (it != lt1.end())
{
	//查找成功則將迭代器位置的數(shù)據(jù)*10
	*it *= 10;
}
for (auto e : lt1)
{
	cout << e << " ";
}
cout << endl;
}

【C++】STL---list基本用法介紹,C++之路,c++,list
可以看到查找成功并將該節(jié)點的數(shù)據(jù)*10。

三、list大小計算

std::list提供了size()函數(shù),用于返回鏈表中元素的數(shù)量。
【C++】STL---list基本用法介紹,C++之路,c++,list

四、迭代器遍歷

list<int> lt1 = { 1,2,3,4,5 };

for (auto it = lt1.begin(); it != lt1.end(); it++)
{
	(*it)++;
	cout << *it << " ";
}
cout << endl;

【C++】STL---list基本用法介紹,C++之路,c++,list

五、常見算法

1??排序

list<int> lt = { 12,56,2,95,35,78,47 };
lt.sort();
for (auto e : lt)
{
	cout << e << " ";
}
cout << endl;

【C++】STL---list基本用法介紹,C++之路,c++,list

2??刪除指定值-remove()

這里需要注意的是:remove()函數(shù)會移除鏈表中所有與指定值相等的元素,而不僅僅是第一個匹配項。這與erase()函數(shù)的行為不同,erase()函數(shù)通常只移除第一個匹配項。

list<int> lt1 = { 12,56,2,95,35,78,47 };
lt1.remove(56);
for (auto e : lt1)
{
	cout << e << " ";
}
cout << endl;

【C++】STL---list基本用法介紹,C++之路,c++,list
如果鏈表中沒有想要刪除的指定值,則remove()函數(shù)不會作任何事情,也不會報錯。請看舉例:
【C++】STL---list基本用法介紹,C++之路,c++,list

3??鏈表元素轉(zhuǎn)移-splice()

在STL中,std::list提供了splice()函數(shù),用于將一個鏈表的元素或者一個元素范圍轉(zhuǎn)移到另一個鏈表中。

splice()函數(shù)共有3個版本:

void splice(const_iterator position, list& x);
void splice(const_iterator position, list& x, const_iterator i);
void splice(const_iterator position, list& x, const_iterator first, const_iterator last);

下面對splice()函數(shù)的3個版本進(jìn)行舉例,請看:

list<int> lt1 = { 1,2,3,4 };
list<int> lt2 = { 10,20,30,40 };

list<int> lt3 = { 1,2,3,4 };
list<int> lt4 = { 10,20,30,40 };

list<int> lt5 = { 1,2,3,4 };
list<int> lt6 = { 10,20,30,40 };

// 將lt2中的所有元素移動到lt1的末尾
lt1.splice(lt1.end(), lt2);
for (auto e : lt1)
	cout << e << " ";
cout << endl;

// 將lt4中的第二個元素移動到lt3的開頭
auto it3 = lt3.begin();
auto it4 = lt4.begin();
it4++;
lt3.splice(it3, lt4, it4);
for (auto e : lt3)
	cout << e << " ";
cout << endl;

//將lt6中的20 30 40移動到lt5的最后位置
auto first = ++lt6.begin();
auto end = lt6.end();
lt5.splice(lt5.end(), lt6, first, end);
for (auto e : lt5)
	cout << e << " ";
cout << endl;

運(yùn)行結(jié)果如下:
【C++】STL---list基本用法介紹,C++之路,c++,list

好了,以上就是本文的全部內(nèi)容,主要對list的一些基本語法和用法進(jìn)行了介紹。
就到這里吧,再見啦友友們?。?!
文章來源地址http://www.zghlxwxcb.cn/news/detail-599966.html

到了這里,關(guān)于【C++】STL---list基本用法介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【C++】STL——list的介紹和使用、list增刪查改函數(shù)的介紹和使用、push_back、pop_back

    【C++】STL——list的介紹和使用、list增刪查改函數(shù)的介紹和使用、push_back、pop_back

    list構(gòu)造函數(shù)的介紹和使用 ? ?? push_front()函數(shù)用于將一個新的元素插入到鏈表的開頭位置。 通過調(diào)用push_front()函數(shù)并將待插入的元素作為參數(shù)傳遞給該函數(shù),即可實現(xiàn)在鏈表開頭插入新元素的操作。 ??和鏈表的插入一樣,push_front()函數(shù)的時間復(fù)雜度為O(1),因為在雙向鏈

    2024年02月15日
    瀏覽(26)
  • STL——list用法

    1、list是可以在常數(shù)范圍內(nèi)在任意位置進(jìn)行插入和刪除的序列式容器,并且該容器可以前后雙向迭代。 2、list就是一個帶頭雙向循環(huán)鏈表, list通常在任意位置進(jìn)行插入、移除元素的執(zhí)行效率更好。 3、 list最大的缺陷是不支持任意位置的隨機(jī)訪問。 有了前面使用string和vector的

    2024年02月12日
    瀏覽(25)
  • 【STL】:list用法詳解

    【STL】:list用法詳解

    朋友們、伙計們,我們又見面了,本期來給大家解讀一下有關(guān)list的使用,如果看完之后對你有一定的啟發(fā),那么請留下你的三連,祝大家心想事成! C 語 言 專 欄: C語言:從入門到精通 數(shù)據(jù)結(jié)構(gòu)專欄: 數(shù)據(jù)結(jié)構(gòu) 個? 人? 主? 頁?: stackY、 C + + 專 欄? ?: C++ Linux 專?欄?

    2024年02月06日
    瀏覽(23)
  • 【STL】list用法&試做_底層實現(xiàn)

    【STL】list用法&試做_底層實現(xiàn)

    目錄 一,list? 使用 1. list 文檔介紹? 2. 常見接口 1.?? list中的sort 2.?list? + sort 與 vector? + sort效率對比 3. 關(guān)于迭代器失效 4. clear 二,list 實現(xiàn) 1.框架搭建? 2. 迭代器類——核心框架 3. operator-? 實現(xiàn)? 4. const——迭代器 5. insert 6. erase 7. clear——實現(xiàn) 8. 拷貝構(gòu)造? 首先實現(xiàn)迭

    2024年02月16日
    瀏覽(21)
  • 【C++從0到王者】第十四站:list基本使用及其介紹

    【C++從0到王者】第十四站:list基本使用及其介紹

    如下所示,是庫里面對list的基本介紹 鏈表是序列容器,允許在序列內(nèi)的任何位置進(jìn)行常量時間的插入和擦除操作,以及兩個方向的迭代。 鏈表容器被實現(xiàn)為雙鏈表;雙鏈表可以將它們包含的每個元素存儲在不同且不相關(guān)的存儲位置。排序是通過與前面元素的鏈接和后面元素的

    2024年02月14日
    瀏覽(22)
  • 【STL】list常見用法及模擬實現(xiàn)(附完整源碼)

    【STL】list常見用法及模擬實現(xiàn)(附完整源碼)

    前言 這篇文章我們繼續(xù)STL中容器的學(xué)習(xí),這篇文章要講解的是list。 1. list介紹及使用 1.1 list介紹 list文檔 list的底層實現(xiàn)就是數(shù)據(jù)結(jié)構(gòu)學(xué)過的帶頭雙向循環(huán)鏈表: 1.2 list使用 我們來看一下幾個常用的接口: 首先看一下構(gòu)造函數(shù): 這里幾個都是我們熟悉的,默認(rèn)構(gòu)造、n個val構(gòu)

    2024年02月07日
    瀏覽(22)
  • 【C++STL基礎(chǔ)入門】list基本使用

    【C++STL基礎(chǔ)入門】list基本使用

    STL(Standard Template Library)是C++標(biāo)準(zhǔn)庫的一個重要組成部分,提供了一套豐富的數(shù)據(jù)結(jié)構(gòu)和算法,可以大大簡化C++程序的開發(fā)過程。其中,list容器是STL提供的一種雙向鏈表實現(xiàn)的數(shù)據(jù)結(jié)構(gòu),具有高效的插入和刪除操作,適用于需要頻繁插入和刪除元素的場景。本文將介紹list容

    2024年02月07日
    瀏覽(23)
  • [STL]list使用介紹

    [STL]list使用介紹

    注:本文測試環(huán)境是visual studio2019。 list是可以在常量時間內(nèi)在任意位置進(jìn)行插入和刪除的序列式容器,并且該容器可以前后雙向迭代。 list的底層是雙向鏈表結(jié)構(gòu),雙向鏈表中每個元素存儲在互不相關(guān)的獨立節(jié)點中,在節(jié)點中通過指針指向其前一個元素和后一個元素。 list與

    2024年02月15日
    瀏覽(32)
  • C++:STL--List

    C++:STL--List

    STL容器的代碼設(shè)計中, 模板編程 和 代碼復(fù)用的思想貫穿始終 ,代碼復(fù)用可以將各個成員接口統(tǒng)一起來從而 大大增加程序的可讀性和可維護(hù)性 ,模板編程使得容器類可以 根據(jù)需要用于存儲各種不同類型的數(shù)據(jù) . C++STL標(biāo)準(zhǔn)庫中的list使用的數(shù)據(jù)結(jié)構(gòu)是帶頭雙向循環(huán)鏈表 ; 鏈表的頭

    2024年02月10日
    瀏覽(24)
  • C++ STL list

    C++ STL list

    ?1主頁:我的代碼愛吃辣 ??2知識講解:C++之 STL list介紹和模擬實現(xiàn) ??3開發(fā)環(huán)境:Visual Studio 2022 ??4前言:上次我們詳細(xì)的介紹了vector,今天我們繼續(xù)來介紹一下TSTL中的另外一個容器list。list在基礎(chǔ)的功能和結(jié)構(gòu)上就是一個雙向帶頭的循環(huán)鏈表,實現(xiàn)起來基本不難,但是

    2024年02月13日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包