色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

c++之list容器

嵌入式技術(shù) ? 來(lái)源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2023-07-15 08:53 ? 次閱讀

1.list容器簡(jiǎn)介

list是序列容器,允許在序列中的任何位置執(zhí)行固定O(1)時(shí)間復(fù)雜度的插入和刪除操作,并在兩個(gè)方向進(jìn)行迭代。list容器是一個(gè)雙向循環(huán)鏈表。

  • list容器與vector容器區(qū)別:

list中空間是隨機(jī)的,通過(guò)指向域保存下一個(gè)成員地址;vector容器空間是連續(xù)的;

list容器數(shù)據(jù)插入和刪除方便,能合理的利用空間;vector容器則是沒(méi)法實(shí)時(shí)分配資源;

wKgaomSxP96ASzZmAAfWkse885c857.png

2.list容器構(gòu)造函數(shù)

list容器構(gòu)造函數(shù):
	list p;//默認(rèn)構(gòu)造
	list(begin,end);//區(qū)間賦值
	list(int num,elem);//num個(gè)elem值
	list(const list &p);//拷貝構(gòu)造
	取頭數(shù)據(jù):front()
	取尾數(shù)據(jù):back();
	互換成員swap();

使用示例:

#include 
using namespace std;
#include 
/*遍歷*/
void PrintList(const list& p, int flag)
{
	if (flag == 1)//正向遍歷
	{
		cout ::const_iterator ptr = p.begin(); ptr != p.end(); ptr++)
		{
			cout ::const_reverse_iterator ptr = p.rbegin(); ptr != p.rend(); ptr++)
		{
			cout  lst;//默認(rèn)構(gòu)造
	//尾插法
	lst.push_back(100);
	lst.push_back(200);
	//頭插法
	lst.push_front(300);
	lst.push_front(400);
	PrintList(lst, 1);
	PrintList(lst, 0);
	list lst2(lst.begin(), lst.end());//區(qū)間賦值
	cout  lst3(3, 666);//3個(gè)666
	PrintList(lst3, 1);
	list lst4(lst2);//拷貝構(gòu)造
}
int main()
{
	test();
	system("pause");
}
wKgaomSxQFCAZY4_AAPWBdLGxEs306.png

3.list容器賦值與互換成員

list容器賦值:
	重載運(yùn)算符=: list& operator=(const list &p);
	siggn(int num,elem);//num個(gè)elem
	siggn(begin,end);//區(qū)間賦值
互換:
	swap(list &p);

使用示例:

#include 
using namespace std;
#include 
void PrintList(const list& p)
{
	for (list::const_iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{
		cout  lst;
	for (int i = 10; i <= 30; i += 10)
	{
		lst.push_back(i);
	}
	list lst2 = lst;//直接賦值
	cout  lst3;
	lst3.assign(5, 666);
	cout  lst4;
	lst4.assign(lst3.begin(), lst3.end());//區(qū)間賦值
	cout 
wKgaomSxQL-AQFzcAAOAoFyWHDU802.png

4.list容器設(shè)置和獲取大小

list容器也有獲取元素個(gè)數(shù)函數(shù)size()和設(shè)置元素個(gè)數(shù)函數(shù)resize(),但list容器不存在獲取容量capacity()。

檢查容器是否為空可以使用empty()函數(shù)。

list容器元素個(gè)數(shù):size()
指定元素個(gè)數(shù):resize(int num);
			 resize(int num,elem); 指定大小,超出用elem補(bǔ)齊
判斷容器是否為空:empty()

使用示例:

#include 
using namespace std;
#include 
void PrintList(const list& p)
{
	for (list::const_iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{
		cout  lst;
	//插入數(shù)據(jù)
	lst.push_back("C++");
	lst.push_back("list容器");
	lst.push_back("學(xué)習(xí)");
	lst.push_back("示例");
	PrintList(lst);
	cout  lst2;
	if (lst2.empty())
	{
		cout 
wKgaomSxQaWAJF7GAAQXx5Zj4nc287.png

5.list容器插入與刪除

list容器中插入與刪除相關(guān)函數(shù)如下所示:


list插入:
	push_back();尾插
	push_front();//頭插入
	insert(iterator pos,elem);//在指定位置插入elem
	insert(iterator pos,n,elem);//在指定位置插入n個(gè)elem
	insert(iterator pos,begin,endl);在指定位置插入一個(gè)區(qū)間
list刪除:
	pop_back();//尾刪
	pop_front();//頭刪除
	erase(iterator pos);//刪除指定位置的內(nèi)容
	erase(begin,end);//刪除區(qū)間內(nèi)容
	clear();//刪除所有內(nèi)容
	remov(elem);刪除容器中所有的elem

使用示例:

#include 
using namespace std;
#include 
class Person
{
public:
	Person(string name, int age) :name(name), age(age) {

	}
	bool operator==(const Person &p);
	string name;
	int age;
};
ostream& operatorage == p.age && this->name == p.name)return true;
	return false;
}
void PrintList(list& p)
{
	for (list::iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{
		cout  lst;
	lst.push_back(p1);
	lst.push_back(p2);
	lst.push_back(p3);
	lst.push_back(p4);
	lst.push_back(p5);
	if (p1 == p1)
	{
		cout ::iterator ptr = lst.begin();
	ptr++;
	lst.insert(ptr, Person("it_阿水", 18));//從第一個(gè)位置插入數(shù)據(jù)
	cout  lst2;
	lst2.insert(lst2.begin(),lst.begin(), lst.end());//從頭插入?yún)^(qū)間數(shù)據(jù)
	cout lst3;
	lst3.push_back(10);
	lst3.push_back(10);
	lst3.push_back(3);
	lst3.push_back(10);
	lst3.push_back(3);
	lst3.remove(10);//刪除所以的10
	for (list::iterator ptr = lst3.begin(); ptr != lst3.end(); ptr++)
	{
		cout 
wKgZomSxQjyAXjdJAAbRGGiR5fQ808.png

6.list容器數(shù)據(jù)存取

由于list容器底層是通過(guò)雙向循環(huán)鏈表來(lái)實(shí)現(xiàn)的,成員空間都是通過(guò)指針域保存的,所以不支持[]和at()訪問(wèn)成員。

list容器的迭代器不支持隨機(jī)訪問(wèn)。


list容器數(shù)據(jù)存取:
	back();//獲取最后一個(gè)元素
	push_back();//從末尾插入
	front();//獲取第一個(gè)元素
	push_front();從頭插入
注意:由于list容器并不是一段連續(xù)的空間,所以不支持[]和at()訪問(wèn)成員
	  list容器的迭代器不支持隨機(jī)訪問(wèn),但是雙向的

使用示例:

#include 
using namespace std;
#include 
void test()
{ 
	list lst;
	//插入數(shù)據(jù)
	lst.push_back(10);
	lst.push_front(20);
	lst.push_back(30);
	cout ::iterator ptr = lst.begin();
	ptr++;//支持往后
	ptr--;//支持往前
	//ptr += 3;錯(cuò)誤,不支持隨機(jī)訪問(wèn)

}
int main()
{
	test();
	system("pause");
}
wKgaomSxQziAGWOOAAL38P_I8RE723.png

7.list容器數(shù)據(jù)反轉(zhuǎn)與排序

list容器自帶排序函數(shù)sort(),默認(rèn)是升序排序。


list容器反轉(zhuǎn):
	reverse();//反轉(zhuǎn)(逆序)
list容器排序
	sort();//成員函數(shù)
注意:所有不支持迭代器隨機(jī)訪問(wèn)的容器都不能使用全局函數(shù)sort進(jìn)行排序,一般該容器會(huì)自帶排序的成員函數(shù)

使用示例:


#include 
using namespace std;
#include 
void PrintList(list& p)
{
	for (list::iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{
		cout  v2;
}
void test()
{
	list lst;
	lst.push_back(10);
	lst.push_back(30);
	lst.push_back(20);
	lst.push_front(40);
	lst.push_front(60);
	lst.push_front(50);
	PrintList(lst);
	//反轉(zhuǎn)
	lst.reverse();
	cout 
wKgZomSxRL2AW1_ZAAPpWb-KwFU685.png

8.list容器自定義數(shù)據(jù)類(lèi)型排序案例

Person數(shù)據(jù)保存每個(gè)用戶的姓名、年齡、身高,現(xiàn)在需要對(duì)年齡按升序排序,若年齡相同,則對(duì)按身高進(jìn)行降序排序。

#include 
using namespace std;
#include 
class Person
{
public:
	Person(string name, int age, int height) :name(name), age(age), height(height) {
	}
	string name;//姓名
	int  age;//年齡
	int height;//身高
};
ostream& operator& p)
{
	for (list::iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{
		cout  p2.height;
	}
	return p1.age < p2.age;
}
void test()
{
	list lst;
	lst.push_back(Person("小王", 18, 170));
	lst.push_back(Person("小劉", 18, 175));
	lst.push_back(Person("小李", 23, 168));
	lst.push_back(Person("小林", 20, 171));
	lst.push_back(Person("小蔣", 18, 172));
	lst.push_back(Person("小姜", 17, 176));
	PrintList(lst);
	cout 
wKgaomSxRY2AR9s-AAWCZ2kW4yM283.png
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4327

    瀏覽量

    62569
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    495

    瀏覽量

    22060
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2108

    瀏覽量

    73618
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    c++vector容器

    1.vector容器介紹 ? ? ? 向量(Vector)是一個(gè)封裝了動(dòng)態(tài)大小數(shù)組的順序容器(Sequence Container)。跟任意其它類(lèi)型容器一樣,它能夠存放各種類(lèi)型的對(duì)象。可以簡(jiǎn)單的認(rèn)為
    的頭像 發(fā)表于 07-13 19:36 ?1419次閱讀
    <b class='flag-5'>c++</b><b class='flag-5'>之</b>vector<b class='flag-5'>容器</b>

    C++STL算法(二)

    C++STL算法(二)
    的頭像 發(fā)表于 07-18 14:49 ?1035次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>之</b>STL算法(二)

    c++STL算法(三)

    c++STL算法(三)
    的頭像 發(fā)表于 07-18 15:00 ?1278次閱讀
    <b class='flag-5'>c++</b><b class='flag-5'>之</b>STL算法(三)

    C++文件操作

    C++文件操作
    的頭像 發(fā)表于 07-21 10:52 ?1108次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>之</b>文件操作

    C++力扣刷題記盛最多的水容器,讓我們從C++做題到放棄

    C++
    電路設(shè)計(jì)
    發(fā)布于 :2023年01月05日 15:49:23

    C++零基礎(chǔ)教程STL容器initializer_list,輕松上手C++STL

    編程語(yǔ)言C++語(yǔ)言
    電子學(xué)習(xí)
    發(fā)布于 :2023年01月14日 11:30:27

    詳細(xì)剖析C++的的3種容器

    容器是隨著面向?qū)ο笳Z(yǔ)言的誕生而提出的,容器類(lèi)在面向?qū)ο笳Z(yǔ)言中特別重要,甚至它被認(rèn)為是早期面向?qū)ο笳Z(yǔ)言的基礎(chǔ)。在現(xiàn)在幾乎所有的面向?qū)ο蟮恼Z(yǔ)言中也都伴隨著一個(gè)容器集,在C++ 中,就是標(biāo)準(zhǔn)
    的頭像 發(fā)表于 01-09 12:57 ?4954次閱讀
    詳細(xì)剖析<b class='flag-5'>C++</b>的的3種<b class='flag-5'>容器</b>

    C++容器的使用代碼資料總結(jié)免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是C++容器的使用代碼資料總結(jié)免費(fèi)下載。
    發(fā)表于 01-29 10:52 ?3次下載
    <b class='flag-5'>C++</b><b class='flag-5'>容器</b>的使用代碼資料總結(jié)免費(fèi)下載

    C++設(shè)計(jì)新思維-泛型編程與設(shè)計(jì)應(yīng)用

    C++設(shè)計(jì)新思維-泛型編程與設(shè)計(jì)應(yīng)用
    發(fā)表于 11-16 15:59 ?3次下載

    什么是list

    list 容器,又稱雙向鏈表容器,即該容器的底層是以雙向鏈表的形式實(shí)現(xiàn)的。這意味著,list 容器
    的頭像 發(fā)表于 02-27 15:52 ?2364次閱讀

    C++學(xué)習(xí)筆記c++的基本認(rèn)識(shí)

    自這篇文章我們即將開(kāi)始C++的奇幻之旅,其內(nèi)容主要是讀C++ Primer的總結(jié)和筆記,有興趣可以找原版書(shū)看看,對(duì)于學(xué)習(xí)C++還是有很大幫助的。這篇文章將從一個(gè)經(jīng)典的程序開(kāi)始介紹C++
    的頭像 發(fā)表于 03-17 13:57 ?727次閱讀

    C++入門(mén)string

    前一篇文章我們已經(jīng)了解了C++中的基本類(lèi)型,C++還提供了很多抽象數(shù)據(jù)類(lèi)型,例如字符串string,string包含多個(gè)字符,以及可變長(zhǎng)度的vector,vector可以包含多個(gè)同一類(lèi)型的對(duì)象
    的頭像 發(fā)表于 03-17 13:58 ?559次閱讀

    C++學(xué)習(xí)筆記順序容器

    C++中的順序容器是一種用于存儲(chǔ)和管理元素序列的數(shù)據(jù)結(jié)構(gòu)。它們提供了一組有序的元素,并支持在序列的任意位置插入和刪除元素。C++標(biāo)準(zhǔn)庫(kù)中提供了多種順序容器,包括vector、deque
    的頭像 發(fā)表于 05-11 17:05 ?591次閱讀

    C++入門(mén)通用算法

    C++ 是一種強(qiáng)大的編程語(yǔ)言,它提供了許多通用算法,可以用于各種容器類(lèi)型。這些算法是通過(guò)迭代器來(lái)操作容器中的元素,因此它們是通用的,可以用于不同類(lèi)型的容器。在本篇博客中,我們將詳細(xì)介紹
    的頭像 發(fā)表于 05-17 09:40 ?657次閱讀

    C++之父新作帶你勾勒現(xiàn)代C++地圖

    為了幫助大家解決這些痛點(diǎn)問(wèn)題,讓大家領(lǐng)略現(xiàn)代C++美,掌握其中的精髓,更好地使用C++C++之父Bjarne Stroustrup坐不住了,他親自操刀寫(xiě)就了這本《
    的頭像 發(fā)表于 10-30 16:35 ?838次閱讀
    <b class='flag-5'>C++</b>之父新作帶你勾勒現(xiàn)代<b class='flag-5'>C++</b>地圖
    主站蜘蛛池模板: 国产亚洲人成网站在线观看播放| 欧美深夜0000XXXX疯狂| 神马电影我不卡国语版| 长篇高h肉爽文丝袜| 国产成人综合95精品视频免费| 免费国产在线观看| 亚洲一区精品在线| 国产嫩草在线观看| 日韩欧美三区| chinese东北夫妻video| 久久精品国产亚洲AV久五月天 | 国产高清在线观看| 女同给老师下媚药| 又黄又猛又爽大片免费| 好硬好湿好大再深一点动态图| 色综合a在线| 被六个男人躁到一夜同性| 久久综合九色综合国产| 亚洲国产精品嫩草影院永久| 国产成人高清精品免费观看| 琪琪see色原网站在线观看| 看电影就来5566先锋av| 小泽玛丽av无码观看| 国产91综合| 日本综艺大尺度无删减版在线 | 精品国产精品人妻久久无码五月天| 日本一在线中文字幕| abp-146| 伦理片97影视网| 永久免费在线观看视频| 极品少妇高潮啪啪AV无码| 亚洲爆乳少妇精品无码专区| 国产对白精品刺激一区二区| 日日操天天操夜夜操| 草比比过程图| 强奷表妺好紧2| jiucao在线观看精品| 欧美人与动牲交ZOOZ特| FREE乌克兰嫩交HD| 欧美男男网站免费观看videos| 99久久国产免费福利|