最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?超詳細示例講解list的使用

 更新時間:2022年07月04日 09:10:39   作者:Hero?2021  
list是一種序列式容器。list容器完成的功能實際上和數據結構中的雙向鏈表是極其相似的,list中的數據元素是通過鏈表指針串連成邏輯意義上的線性表,也就是list也具有鏈表的主要優(yōu)點,即:在鏈表的任一位置進行元素的插入、刪除操作都是快速的

一、list的介紹

list的介紹

  • list是可以以O(1)的時間復雜度任意位置進行插入和刪除的序列式容器,并且該容器可以前后雙向迭代。
  • list的底層是雙向鏈表結構,雙向鏈表中每個元素存儲在互不相關的獨立節(jié)點中,在節(jié)點中通過指針指向其前一個元素和后一個元素。
  • list與forward_list非常相似:最主要的不同在于forward_list是單鏈表,只能朝前迭代,已讓其更簡單高效。
  • 與其他的序列式容器相比(array,vector,deque),list通常在任意位置進行插入、移除元素的執(zhí)行效率更好。
  • 與其他序列式容器相比,list和forward_list最大的缺陷是不支持任意位置的隨機訪問,比如:要訪問list的第6個元素,必須從已知的位置(比如頭部或者尾部)迭代到該位置,在這段位置上迭代需要線性的時間開銷;list還需要一些額外的空間,以保存每個節(jié)點的相關聯信息(對于存儲類型較小元素的大list來說這可能是一個重要的因素)

二、list的使用

2.1 list的構造函數

構造函數接口說明
list()空構造
list (size_type n, const value_type& val = value_type())初始化的list中包含n個val值
list (const list& x)拷貝構造函數
list (InputIterator first, InputIterator last)用迭代器區(qū)間[first,last)構造list
void test_list1()
{
	// 空構造
	list<int> l1;
	l1.push_back(1);
	l1.push_back(2);
	l1.push_back(3);
	l1.push_back(4);
	for (int e: l1)
	{
		cout << e << " ";
	}
	cout << endl;
	// 初始化的list中包含n個val值
	list<int> l2(4,10);
	for (int e : l2)
	{
		cout << e << " ";
	}
	cout << endl;
	// 拷貝構造函數
	list<int> l3(l1);
	for (int e : l3)
	{
		cout << e << " ";
	}
	cout << endl;
	// 用迭代器區(qū)間[first,last)構造list
	list<int> l4(l3.begin(), l3.end());
	for (int e : l4)
	{
		cout << e << " ";
	}
}

2.2 list迭代器的使用

函數聲明接口說明
begin+end返回第一個元素的迭代器+返回最后一個元素的下一個位置的迭代器
rbegin+rend返回end位置+返回begin位置
// 正\反向迭代器
void test_list2()
{
	list<int> lt;
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	lt.push_back(4);
	// 正向迭代器
	list<int>::iterator it = lt.begin();
	while (it!=lt.end())
	{
		cout << *it << " ";
		++it;
	}
	cout << endl;
	// 反向迭代器
	list<int>::reverse_iterator rit = lt.rbegin();
	while (rit!=lt.rend())
	{
		cout << *rit << " ";
		++rit;
	}
}

2.3 list相關的容量大小相關的函數

函數聲明接口說明
empty檢測list是否為空,是返回true,否返回false
size返回list中有效結點的個數
void test_list3()
{
	list<int> l1;
	l1.push_back(1);
	l1.push_back(2);
	l1.push_back(3);
	l1.push_back(4);
	cout << l1.size() << endl; // 4
	cout << l1.empty() << endl;// 0
}

2.4 list數據的訪問相關的函數

函數聲明接口說明
front返回list中的第一個結點值的引用
back返回list中最后一個結點值的引用
void test_list4()
{
	list<int> l1;
	l1.push_back(1);
	l1.push_back(2);
	l1.push_back(3);
	l1.push_back(4);
	cout << l1.front() << endl; // 1
	cout << l1.back() << endl;  // 4
}

2.5 list的數據調整相關的函數

函數聲明接口說明
push_front在首元素前插入元素
pop_front刪除第一個元素
push_back尾插
pop_back尾刪
insert在pos位置插入值
erase刪除pos位置的值
swap交換兩個list中的值
clear清空list中的有效元素
void test_list5()
{
	list<int> l;
	l.push_back(1);
	l.push_front(2);
	list<int>::iterator it = l.begin();
	++it;
	l.insert(it, 20);
	for (int e : l)
	{
		cout << e << " ";
	}
	cout << endl;
	cout << "------" << endl;
	l.clear();
	for (int e : l)
	{
		cout << e << " ";
	}
}

2.6 list中其他函數操作

函數聲明接口說明
sort排序
reverse逆置
unique去重(去重之前一般需要先排序)
remove刪除給定的一個值
void test_list6()
{
	list<int> l1;
	l1.push_back(1);
	l1.push_back(7);
	l1.push_back(3);
	l1.push_back(3);
	l1.push_back(3);
	l1.push_back(4);
	// 排序
	l1.sort();
	for (int e : l1)
	{
		cout << e << " ";
	}
	cout << endl;
	// 逆置
	l1.reverse();
	for (int e : l1)
	{
		cout << e << " ";
	}
	cout << endl;
	// 去重
	l1.unique();
	for (int e : l1)
	{
		cout << e << " ";
	}
	cout << endl;
	// 刪除給定的一個值
	l1.remove(7);
	for (int e : l1)
	{
		cout << e << " ";
	}
	cout << endl;
}

到此這篇關于C++ 超詳細示例講解list的使用的文章就介紹到這了,更多相關C++ list的使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++ 中引用和指針的關系實例詳解

    C++ 中引用和指針的關系實例詳解

    這篇文章主要介紹了C++ 中引用和指針的關系實例詳解的相關資料,需要的朋友可以參考下
    2017-06-06
  • C語言實現大數值金額大寫轉換的方法詳解

    C語言實現大數值金額大寫轉換的方法詳解

    這篇文章主要為大家詳細介紹了如何利用C語言實現大數值金額大寫轉換的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-03-03
  • win32下進程間通信(共享內存)實例分析

    win32下進程間通信(共享內存)實例分析

    這篇文章主要介紹了win32下進程間通信(共享內存)實例分析,對win32應用程序及進程的原理做了較為深入的剖析,需要的朋友可以參考下
    2014-07-07
  • C讀txt到二維數組的實現方法

    C讀txt到二維數組的實現方法

    下面小編就為大家?guī)硪黄狢讀txt到二維數組的實現方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++?JSON庫?nlohmann::basic_json::accept的用法解析

    C++?JSON庫?nlohmann::basic_json::accept的用法解析

    nlohmann::basic_json::accept 是 Nlohmann JSON 庫中的一個方法,它用于檢查一個字符串是否可以解析為有效的 JSON,這篇文章主要介紹了C++?JSON庫nlohmann::basic_json::accept的用法,需要的朋友可以參考下
    2023-06-06
  • C++優(yōu)先隊列的使用小結

    C++優(yōu)先隊列的使用小結

    普通的隊列是一種先進先出的數據結構,元素在隊列尾追加,而從隊列頭刪除,在優(yōu)先隊列中,元素被賦予優(yōu)先級,本文主要介紹了C++優(yōu)先隊列的使用,感興趣的可以了解一下
    2023-11-11
  • C++實現小型圖書管理系統(tǒng)

    C++實現小型圖書管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現小型圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 使用VC++實現打印乘法口訣表

    使用VC++實現打印乘法口訣表

    本文給大家分享的是一個超級簡單的小例子,使用vc++打印乘法口訣表,給需要的小伙伴參考下吧。
    2015-03-03
  • QT網絡編程UDP下C/S架構廣播通信(實例講解)

    QT網絡編程UDP下C/S架構廣播通信(實例講解)

    下面小編就為大家?guī)硪黄猀T網絡編程UDP下C/S架構廣播通信(實例講解)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Qt音視頻開發(fā)之視頻文件保存功能的實現

    Qt音視頻開發(fā)之視頻文件保存功能的實現

    和音頻存儲類似,視頻的存儲也對應三種格式,視頻最原始的數據是yuv(音頻對應pcm),視頻壓縮后的數據是h264(音頻對應aac)。本文將利用Qt實現視頻文件保存功能,感興趣的可以了解一下
    2022-12-12

最新評論

左贡县| 聊城市| 隆安县| 新疆| 舒兰市| 乡宁县| 阿鲁科尔沁旗| 女性| 南投市| 广东省| 吉安市| 鄄城县| 和平区| 苍溪县| 东港市| 宜阳县| 砚山县| 买车| 隆安县| 灵川县| 中牟县| 乐山市| 凌云县| 宜君县| 望奎县| 顺昌县| 池州市| 五台县| 乌审旗| 廊坊市| 清水河县| 潍坊市| 黑龙江省| 岳普湖县| 定安县| 虹口区| 平乡县| 南澳县| 图木舒克市| 洛浦县| 浠水县|