日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

C++ STL容器之 list 初步

發(fā)布時(shí)間:2023/11/30 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ STL容器之 list 初步 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#include <iostream> #include<algorithm> #include <string> #include <list> using namespace std;//3.6.4.1 list構(gòu)造函數(shù) //list<T> lstT;//list采用采用模板類實(shí)現(xiàn),對(duì)象的默認(rèn)構(gòu)造形式: //list(beg, end);//構(gòu)造函數(shù)將[beg, end)區(qū)間中的元素拷貝給本身。 //list(n, elem);//構(gòu)造函數(shù)將n個(gè)elem拷貝給本身。 //list(const list& lst);//拷貝構(gòu)造函數(shù)。 //3.6.4.2 list數(shù)據(jù)元素插入和刪除操作 //push_back(elem);//在容器尾部加入一個(gè)元素 //pop_back();//刪除容器中最后一個(gè)元素 //push_front(elem);//在容器開頭插入一個(gè)元素 //pop_front();//從容器開頭移除第一個(gè)元素 //insert(pos, elem);//在pos位置插e(cuò)lem元素的拷貝,返回新數(shù)據(jù)的位置。 //insert(pos, n, elem);//在pos位置插入n個(gè)elem數(shù)據(jù),無(wú)返回值。 //insert(pos, beg, end);//在pos位置插入[beg,end)區(qū)間的數(shù)據(jù),無(wú)返回值。 //clear();//移除容器的所有數(shù)據(jù) //erase(beg, end);//刪除[beg,end)區(qū)間的數(shù)據(jù),返回下一個(gè)數(shù)據(jù)的位置。 //erase(pos);//刪除pos位置的數(shù)據(jù),返回下一個(gè)數(shù)據(jù)的位置。 //remove(elem);//刪除容器中所有與elem值匹配的元素。 // // //3.6.4.3 list大小操作 //size();//返回容器中元素的個(gè)數(shù) //empty();//判斷容器是否為空 //resize(num);//重新指定容器的長(zhǎng)度為num, //若容器變長(zhǎng),則以默認(rèn)值填充新位置。 //如果容器變短,則末尾超出容器長(zhǎng)度的元素被刪除。 //resize(num, elem);//重新指定容器的長(zhǎng)度為num, //若容器變長(zhǎng),則以elem值填充新位置。 //如果容器變短,則末尾超出容器長(zhǎng)度的元素被刪除。 // //3.6.4.4 list賦值操作 //assign(beg, end);//將[beg, end)區(qū)間中的數(shù)據(jù)拷貝賦值給本身。 //assign(n, elem);//將n個(gè)elem拷貝賦值給本身。 //list& operator=(const list& lst);//重載等號(hào)操作符 //swap(lst);//將lst與本身的元素互換。 //3.6.4.5 list數(shù)據(jù)的存取 //front();//返回第一個(gè)元素。 //back();//返回最后一個(gè)元素。 //3.6.4.6 list反轉(zhuǎn)排序 //reverse();//反轉(zhuǎn)鏈表,比如lst包含1,3,5元素,運(yùn)行此方法后,lst就包含5,3,1元素。 //sort(); //list排序//打印數(shù)據(jù) void printInt(list<int>& l) {for (list<int>::iterator it = l.begin(); it != l.end(); ++it) {cout << *it << endl;} }void test1() {list<int> l;for (int i = 0; i < 5; i++) {l.push_back(i);}list<int> l2(10, 88);list<int> l3(l2.begin(), l2.end());printInt(l2);printInt(l3);l2.push_back(100);//逆序打印for (list<int>::reverse_iterator it = l2.rbegin(); it != l2.rend(); ++it) {cout << *it << endl;}// list容器不支持隨機(jī)訪問(wèn)迭代器list<int>::iterator it_1 = l.begin();//it_1 = it_1 + 1; // 插入數(shù)據(jù) 尾插 頭插list<int> l1;l1.push_back(23);l1.push_front(233);//刪除兩端數(shù)據(jù) 尾刪 頭刪l1.pop_back();l1.pop_front();// insert 插入數(shù)據(jù)l1.insert(l1.begin(), 1000);//remove 刪除數(shù)據(jù)l1.remove(1000);// list大小cout << l1.size() << endl;}bool intPare(int a, int b) {return a > b; }void test2() {list<int> l4;l4.assign(5, 2);//printInt(l4);list<int> l5;l5.push_back(234);l5.push_back(89);l5.assign(l4.begin(), l4.end()); // 這樣l5之前的數(shù)據(jù)就沒(méi)有了printInt(l5);l5.push_front(563);// 不支持隨機(jī)訪問(wèn)迭代器的容器, 都不能用系統(tǒng)排序sort// X sort(l5.begin(), l5.end());l5.sort();// 默認(rèn)升序printInt(l5);l5.sort(intPare); // 自定義排序printInt(l5); l5.reverse();// 反轉(zhuǎn) }//list 操作自定義類型 class Person { public:Person(string name, int age, int height) {this->m_name = name;this->m_age = age;this->m_height = height;}bool operator== (const Person &p) {return this->m_age == p.m_age && this->m_height == p.m_height && this->m_name == p.m_name;}string m_name;int m_age;int m_height; };// 年齡降序, 年齡一樣的話, 按照身高升序來(lái) bool personParse(Person &p1, Person &p2) {if (p1.m_age == p2.m_age) {return p1.m_height < p2.m_height;}return p1.m_age > p2.m_age; } void printPerson(const list<Person> &l) {for (list<Person>::const_iterator it = l.begin(); it != l.end(); ++it) {cout << (*it).m_name << "age is" << (*it).m_age << "height is" << (*it).m_height << endl;} } void test3() {list<Person> l;Person p1("A", 50, 172);Person p2("B", 23, 182);Person p3("C", 78, 178);Person p4("D", 29, 183);Person p5("E", 29, 180);l.push_back(p1);l.push_back(p2);l.push_back(p3);l.push_back(p4);l.push_back(p5);//l.sort(); 對(duì)于自定義數(shù)據(jù)類型,需要自定義排序規(guī)則l.sort(personParse);printPerson(l);// list 容器刪除自定義類型數(shù)據(jù)Person p6("E", 29, 180);l.remove(p6); //??? 這里不知道為什么報(bào)錯(cuò),// 二進(jìn)制“==”: 沒(méi)有找到接受“const _Ty”類型的左操作數(shù)的運(yùn)算符(或沒(méi)有可接受的轉(zhuǎn)換printPerson(l); } int main() {//test1();//test2();test3();return 0; }

list是一種物理存儲(chǔ)單元上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過(guò)鏈表中的指針鏈接次序?qū)崿F(xiàn)的。
ist容器不僅是一個(gè)雙向鏈表,而且還是一個(gè)循環(huán)的雙向鏈表。

list所支持迭代器為雙向迭代器

不支持系統(tǒng)的sort排序, list有自己的sort成員函數(shù)

疑惑:??? list在刪除自定義數(shù)據(jù)類型是報(bào)錯(cuò)
二進(jìn)制“==”: 沒(méi)有找到接受“const _Ty”類型的左操作數(shù)的運(yùn)算符(或沒(méi)有可接受的轉(zhuǎn)換)
這里先記錄下, 后期明白了, 再來(lái)解決。

總結(jié)

以上是生活随笔為你收集整理的C++ STL容器之 list 初步的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。