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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ STL容器之 list 初步

發布時間:2023/11/30 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ STL容器之 list 初步 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include <iostream> #include<algorithm> #include <string> #include <list> using namespace std;//3.6.4.1 list構造函數 //list<T> lstT;//list采用采用模板類實現,對象的默認構造形式: //list(beg, end);//構造函數將[beg, end)區間中的元素拷貝給本身。 //list(n, elem);//構造函數將n個elem拷貝給本身。 //list(const list& lst);//拷貝構造函數。 //3.6.4.2 list數據元素插入和刪除操作 //push_back(elem);//在容器尾部加入一個元素 //pop_back();//刪除容器中最后一個元素 //push_front(elem);//在容器開頭插入一個元素 //pop_front();//從容器開頭移除第一個元素 //insert(pos, elem);//在pos位置插elem元素的拷貝,返回新數據的位置。 //insert(pos, n, elem);//在pos位置插入n個elem數據,無返回值。 //insert(pos, beg, end);//在pos位置插入[beg,end)區間的數據,無返回值。 //clear();//移除容器的所有數據 //erase(beg, end);//刪除[beg,end)區間的數據,返回下一個數據的位置。 //erase(pos);//刪除pos位置的數據,返回下一個數據的位置。 //remove(elem);//刪除容器中所有與elem值匹配的元素。 // // //3.6.4.3 list大小操作 //size();//返回容器中元素的個數 //empty();//判斷容器是否為空 //resize(num);//重新指定容器的長度為num, //若容器變長,則以默認值填充新位置。 //如果容器變短,則末尾超出容器長度的元素被刪除。 //resize(num, elem);//重新指定容器的長度為num, //若容器變長,則以elem值填充新位置。 //如果容器變短,則末尾超出容器長度的元素被刪除。 // //3.6.4.4 list賦值操作 //assign(beg, end);//將[beg, end)區間中的數據拷貝賦值給本身。 //assign(n, elem);//將n個elem拷貝賦值給本身。 //list& operator=(const list& lst);//重載等號操作符 //swap(lst);//將lst與本身的元素互換。 //3.6.4.5 list數據的存取 //front();//返回第一個元素。 //back();//返回最后一個元素。 //3.6.4.6 list反轉排序 //reverse();//反轉鏈表,比如lst包含1,3,5元素,運行此方法后,lst就包含5,3,1元素。 //sort(); //list排序//打印數據 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容器不支持隨機訪問迭代器list<int>::iterator it_1 = l.begin();//it_1 = it_1 + 1; // 插入數據 尾插 頭插list<int> l1;l1.push_back(23);l1.push_front(233);//刪除兩端數據 尾刪 頭刪l1.pop_back();l1.pop_front();// insert 插入數據l1.insert(l1.begin(), 1000);//remove 刪除數據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之前的數據就沒有了printInt(l5);l5.push_front(563);// 不支持隨機訪問迭代器的容器, 都不能用系統排序sort// X sort(l5.begin(), l5.end());l5.sort();// 默認升序printInt(l5);l5.sort(intPare); // 自定義排序printInt(l5); l5.reverse();// 反轉 }//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; };// 年齡降序, 年齡一樣的話, 按照身高升序來 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(); 對于自定義數據類型,需要自定義排序規則l.sort(personParse);printPerson(l);// list 容器刪除自定義類型數據Person p6("E", 29, 180);l.remove(p6); //??? 這里不知道為什么報錯,// 二進制“==”: 沒有找到接受“const _Ty”類型的左操作數的運算符(或沒有可接受的轉換printPerson(l); } int main() {//test1();//test2();test3();return 0; }

list是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。
ist容器不僅是一個雙向鏈表,而且還是一個循環的雙向鏈表。

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

不支持系統的sort排序, list有自己的sort成員函數

疑惑:??? list在刪除自定義數據類型是報錯
二進制“==”: 沒有找到接受“const _Ty”類型的左操作數的運算符(或沒有可接受的轉換)
這里先記錄下, 后期明白了, 再來解決。

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。