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

C++——STL標準模板庫——容器詳解——list

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

一、基本概念

(一)定義

list:雙向鏈表。list是一種分布式存儲的線性表,每個節(jié)點分為數(shù)據(jù)域和指針域,其中指針域中包含一個指向前驅(qū)節(jié)點的指針和一個指向后續(xù)節(jié)點的指針,基本模型如下:C++——STL標準模板庫——容器詳解——list,c++,開發(fā)語言

(二)特性

1、雙向鏈表:每個元素都有一個前驅(qū)和一個后繼,這種結(jié)構(gòu)允許在鏈表的任何位置實現(xiàn)快速的插入和刪除而不影響其他元素。插入和刪除時間復雜度為O(1)。

2、迭代器:list提供了雙向迭代器,支持++和--運算符,能夠前后移動,但不支持隨機訪問,也就是不支持+、-、+=、-=運算。

3、優(yōu)勢和劣勢:相對于deque或者vector,在任意位置插入或者刪除元素效率較高;但隨機訪問效率較低。使用場景多為需要頻繁插入或者刪除元素時。

二、構(gòu)造函數(shù)

(1)list<T>::list();? ? ? ? ? ? ? ? ? ? ? ? 默認構(gòu)造函數(shù)

(2)list<T>::list(size_t size);? ? ? ?構(gòu)造包含size個元素的鏈表,默認值為0;

(3)list<T>::list(size_t size,T value);? ? ? ? 申請size大小鏈表,初始化為value;

(4)list<T>::list(initializer_list<int> _list);? ?初始化列表構(gòu)造;

(5)list<T>::list(list<int>& other);? ? ? ? ? ? ? ?拷貝構(gòu)造函數(shù);?

(6)list<T::list(iterator begin,iterator end);?指定范圍構(gòu)造;

(7)list<T>::list(list<int>&& other);? ? ? ? ? ? ?移動構(gòu)造;(c++11)

三、成員函數(shù)

(一)迭代器相關函數(shù)

begin()和end();? ? ? ? ? ? ? ? 返回指向首節(jié)點迭代器和指向尾節(jié)點后面一個位置迭代器;

cbegin()和cend();? ? ? ? ? ? ?begin()和end()的常量迭代器

rbegin()和rend();? ? ? ? ? ? ? begin()和end()的反向迭代器

crbegin()和crend();? ? ? ? ? ?begin()和end()的反向常量迭代器

(二)大小相關函數(shù)

size_t list<T>::size();? ? ? ? ? ? ? ? ? ? ? ? 返回鏈表當前元素數(shù)量

size_t list<T>::max_size();? ? ? ? ? ? ? ?返回鏈表最大容納元素數(shù)量

bool ??list<T>::empty();? ? ? ? ? ? ? ? ? ? ? ?判斷鏈表是否為空

(三)訪問函數(shù)

const T& list<T>::front();? ? ? ? ? ? ? ? ????????????????返回第一個元素常量引用;

const T& list<T>::back();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?返回最后一個元素常量引用;

(四)修改函數(shù)

void list<T>::push_back(T&value);? ? ? ? ? ? ? ? 尾插

void?list<T>::push_front(T&value);? ? ? ? ? ? ? ? 頭插

void?list<T>::pop_back();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?尾刪

void list<T>::pop_front();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?頭刪

void list<T>::remove(T&value);? ? ? ? ? ? ? ? ? ? ?刪除指定元素

void list<T>::unique();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?刪除相鄰且重復的后續(xù)元素

void list<T>::insert(iterator pos,T&value);? ? ?指定位置插入元素,存在插入多個元素、插入?yún)^(qū)間、插入初始化列表等多個重載

void list<T>::splice(iterator pos,list<T>&other); 指定位置復制插入或者移動插入other鏈表(指定元素或指定區(qū)間的元素)

void list<T>::erase(iterator pos);? ? ? ? ? ? ? ? ? ?刪除迭代器指定位置的元素,或者區(qū)間

(五)查找函數(shù)

list<T>::itrator find(list<T>::iterator first,list<T>::iterator last,const T& value);? ? ? ? ? 查找容器指定區(qū)間內(nèi)的value值第一次出現(xiàn)的位置

int count(list<T>::iterator first,list<T>::iterator last,const T&value);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?查找容器指定區(qū)間內(nèi)value的個數(shù)

lower_bound(value);? ? ? ? 對于有序容器返回從左邊找到的最合適的插入位置的迭代器

upper_bound(vlaue);? ? ? ?對于有序容器返回從右邊找到的最合適的插入位置的迭代器

equal_range(value);? ? ? ? 返回有序序列中第一個value值和最后一個value值出現(xiàn)位置的區(qū)間,返回值為pair類型,叫做對組。原型為pair<typename T,typename K>,代表包含兩個數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu)。first代表第一個類型,second代表第二個類型。

注意:這些函數(shù)不是容器的成員函數(shù)

(六)其他函數(shù)

list<T>::swap(list<T>&other);? ? ?交換兩個鏈表的內(nèi)容

list<T>::revers();? ? ? ? ? ? ? ? ? ? ? ? ?翻轉(zhuǎn)鏈表

list<T>::sort();? ? ? ? ? ? ? ? ? ? ? ? ? ? ?排序函數(shù),默認遞增;當鏈表內(nèi)元素是自定義類型或者需要遞減排序時,需要傳入比較函數(shù)作為參數(shù)。

list<T>::clear();? ? ? ? ? ? ? ? ? ? ? ? ? ?清空鏈表

list<T>::resize(size_t newsize);? 改變鏈表大小,大于原鏈表大小時,添加初始化元素;小于原鏈表大小時,從鏈表后面刪除相應元素。

四、排序算法示例

#include<iostream>
using namespace std;
#include<list>
#include<algorithm>
#include<string>
class Person {
public:
	string m_Nmae;
	int m_Age;
	int m_Height;
};
void printPerson(const Person&p) {
	cout << "姓名:" << p.m_Nmae << " 年齡:" << p.m_Age << " 身高:" << p.m_Height << endl;
}
bool MyCompare(Person&p1, Person&p2) {
	if (p1.m_Age == p2.m_Age) {
		return p1.m_Height > p2.m_Height;
	}
	else {
		return p1.m_Age < p2.m_Age;
	}
}
void test() {
	Person p1 = { "張三",20,170 };
	Person p2 = { "李四",30,165 };
	Person p3 = { "王五",40,185 };
	Person p4 = { "趙六",40,180 };
	Person p5 = { "陳七",50,185 };
	list<Person>l;
	l.push_back(p1);
	l.push_back(p3);
	l.push_back(p4);
	l.push_back(p2);
	l.push_front(p5);
	for_each(l.begin(), l.end(), printPerson); cout << endl;
	l.sort(MyCompare);
	for_each(l.begin(), l.end(), printPerson);
}
int main(int argc,char const **argv) {
	test();
	return 0;
}

C++——STL標準模板庫——容器詳解——list,c++,開發(fā)語言?例子中對排序多加了一層邏輯,優(yōu)先年齡排序,年齡相同時根據(jù)身高排序。文章來源地址http://www.zghlxwxcb.cn/news/detail-793522.html

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

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

領支付寶紅包贊助服務器費用

相關文章

  • 15 標準模板庫STL之容器1

    基礎知識 ????????1、vector和數(shù)組有點類似,但它比數(shù)組更好用。一般來說,數(shù)組的長度是不能動態(tài)拓展的,因此就需要考慮長度到底多大合適。長度不能過大,否則浪費內(nèi)存;也不能過小,否則內(nèi)存不夠。vector正好彌補了這個缺陷,相當于一個可以自動改變數(shù)組長度的動

    2023年04月12日
    瀏覽(20)
  • 22 標準模板庫STL之容器適配器

    概述 ????????提到適配器,我們的第一印象是想到設計模式中的適配器模式:將一個類的接口轉(zhuǎn)化為另一個類的接口,使原本不兼容而不能合作的兩個類,可以一起工作。STL中的容器適配器與此類似,是一個封裝了序列容器的類模板,它在一般序列容器的基礎上提供了一

    2024年02月05日
    瀏覽(23)
  • STL標準模板庫 vector容器與迭代器入門

    STL標準模板庫 vector容器與迭代器入門

    vector 就是一個連續(xù)的數(shù)據(jù) C++11 std::vector a ={1,4,2,6,7}; 可以使用花括號來定義 容器的功能就是存儲數(shù)據(jù) 迭代器的功能就是指向數(shù)據(jù),并且可以實現(xiàn)前后移動(指針)算法和容器的接口的存在 vector功能是長度可變的數(shù)組, 身在棧上 里面的數(shù)據(jù)存儲在堆上 因為棧不可動態(tài)擴容

    2023年04月23日
    瀏覽(32)
  • 【C++STL標準庫】序列容器之deuqe與、orwa_list與list

    基本概念這里就不再浪費時間去解釋,這里給出deuqe與、orwa_list、list的基本使用方法: deque隊列: forward_list單向列表: list雙向鏈表: 如果發(fā)現(xiàn)文章中有錯誤,還請大家指出來,我會非常虛心地學習,我們一起進步!?。?/p>

    2024年02月15日
    瀏覽(17)
  • C++ STL 標準模板庫介紹與入門

    目錄 1、概述 1.1、C++ 標準庫 1.2、Boost庫 2、STL 版本 2.1、HP 原始版本

    2024年02月05日
    瀏覽(26)
  • 【C++】:STL——標準模板庫介紹 || string類

    【C++】:STL——標準模板庫介紹 || string類

    STL(standard template libaray-標準模板庫):是C++標準庫的重要組成部分,不僅是一個可復用的組件庫,而且 是一個包羅數(shù)據(jù)結(jié)構(gòu)與算法的軟件框架 原始版本 Alexander Stepanov、Meng Lee 在惠普實驗室完成的原始版本,本著開源精神,他們聲明允許任何人任意運用、拷貝、修改、傳播、商

    2024年02月05日
    瀏覽(20)
  • c++標準模板(STL)(std::array)(三)

    c++標準模板(STL)(std::array)(三)

    template ? ? class T, ? ? std::size_t N struct array; (C++11 起 ? std::array 是封裝固定大小數(shù)組的容器。 此容器是一個聚合類型,其語義等同于保有一個 C 風格數(shù)組 T[N] 作為其唯一非靜態(tài)數(shù)據(jù)成員的結(jié)構(gòu)體。不同于 C 風格數(shù)組,它不會自動退化成 T* 。它能作為聚合類型聚合初始化,只要

    2024年02月02日
    瀏覽(26)
  • 一天學完C++的標準模板庫STL

    一天學完C++的標準模板庫STL

    提到字符串,我們會想起C語言中的 char * ,這是一個指針。而在STL中 string 也是用來聲明字符串的,但是 string 是一個類,需要導入庫 #includestring 。 String 封裝了 char * ,管理這個字符串,是一個 char* 型的 容器 。 string 本質(zhì)上是一個動態(tài)的 char 數(shù)組。 使用String字符串的第一步

    2023年04月17日
    瀏覽(17)
  • 【C++學習】STL容器——list

    【C++學習】STL容器——list

    目錄 一、list的介紹及使用 1.1 list的介紹 ?1.2 list的使用 1.2.1 list的構(gòu)造 ?1.2.2??list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list 迭代器失效 二、list的模擬實現(xiàn) 2.1 模擬實現(xiàn)list 三、list和vector的對比 一、list的介紹及使用 1.1 list的介紹 list的文檔介紹

    2024年02月14日
    瀏覽(20)
  • (AI創(chuàng)作實驗)C++中的STL(標準模板庫)

    STL概述 STL: (Standard Template Library) 標準模板庫 包含一些常用的算法如排序查找,還有常用的數(shù)據(jù)結(jié)構(gòu)如可變長數(shù)組、鏈表、字典等。 使用方便,效率較高 要使用其中的算法,需要#include C++中的STL(標準模板庫)是一個非常強大的工具,為程序員提供了許多高效的數(shù)據(jù)結(jié)構(gòu)和算

    2023年04月18日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包