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”類型的左操作數的運算符(或沒有可接受的轉換)
這里先記錄下, 后期明白了, 再來解決。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382571.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382571.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382571.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ STL容器值set

/* 3.7.2 set常用API 3.7.2.1 set構造函數 set<T> st;//set默認構造函數&#xff1a; mulitset<T> mst; //multiset默認構造函數: set(const set& st);//拷貝構造函數 3.7.2.2 set賦值操作 set & operator(const set & st);//重載等號操作符 swap(st)…

C++ STL容器之map 簡單使用

3.8.2.1 map構造函數 map<T1, T2> mapTT;//map默認構造函數: map(const map &mp);//拷貝構造函數3.8.2.2 map賦值操作 map& operator(const map &mp);//重載等號操作符 swap(mp);//交換兩個集合容器3.8.2.3 map大小操作 size();//返回容器中元素的數目 empty…

Manacher算法圖解

看了好久的Manacher算法&#xff0c;覺得還是要自己畫一遍&#xff0c;自己把代碼寫一遍才能理解 下面分享一下&#xff0c;如果有錯&#xff0c;希望指正 簡陋版本的&#xff0c;但是他基本只是做到了求取最長回文字符串&#xff0c;嚴格來說它并不是Manacher’s Algorithm-…

Flink 客戶端操作命令及可視化工具

Flink提供了豐富的客戶端操作來提交任務和與任務進行交互。下面主要從Flink命令行、Scala Shell、SQL Client、Restful API和 Web五個方面進行整理。 在Flink安裝目錄的bin目錄下可以看到flink&#xff0c;start-scala-shell.sh和sql-client.sh等文件&#xff0c;這些都是客戶…

ySQL挑戰搭建一個簡易的成績管理系統的數據庫

文章為自己搜索網上資源&#xff0c;再在這里進行整理&#xff0c;所以標注為轉載 [實驗步驟](https://www.shiyanlou.com/courses/reports/1347700) 總結做實驗注意事項&#xff1a; 1.添加主鍵 2.主鍵和外鍵的關系 3.注意自增的書寫添加 mysql 如何修改、添加、刪除表主鍵…

網絡之DNS協議圖解

DNS是計算機域名系統 (Domain Name System) 域名系統采用類似目錄樹的等級結構。 域名服務器是指保存有該網絡中所有主機的域名和對應IP地址&#xff0c;并具有將域名轉換為IP地址功能的服務器。 域名服務器為客戶機/服務器模式中的服務器方&#xff0c;它主要有兩種形式&am…

C++ 謂詞,

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <vector> #include <algorithm> using namespace std;class GreaterThen20 { public:bool operator()(int val){return val > 20;} };//一元謂詞 void test01() {vector<int>v;v.push…

網絡之ARP

地址解析協議&#xff0c;即ARP&#xff08;Address Resolution Protocol&#xff09;&#xff0c;是根據IP地址獲取物理地址的一個TCP/IP協議。 主機發送信息時將包含目標IP地址的ARP請求廣播到網絡上的所有主機&#xff0c;并接收返回消息&#xff0c;以此確定目標的物理地址…

C++ 內建函數對象

STL內建了一些函數對象。分為:算數類函數對象,關系運算類函數對象&#xff0c;邏輯運算類仿函數。這些仿函數所產生的對象&#xff0c;用法和一般函數完全相同&#xff0c;當然我們還可以產生無名的臨時對象來履行函數功能。使用內建函數對象&#xff0c;需要引入頭文件 functi…

網絡之ICMP協議

ICMP 主要功能&#xff1a; 確認IP包是否成功送達目標地址通知在發送過程當中IP包被廢棄的具體原因改善網絡設置等 在IP通信中如果某個IP包因為某種原因未到達目標地址&#xff0c;那么這個原因由ICMP通知。 過程&#xff08;圖解TCP/IP&#xff09; ICMP類型 常見的&am…

C++ 常用算法之遍歷

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <algorithm> #include <vector> #include <functional> using namespace std;/* 遍歷算法 遍歷容器元素 param beg 開始迭代器 param end 結束迭代器 param _callback 函數回調或者函數…

網絡之NAT協議

由來&#xff1a; 2011年2月3日中國農歷新年&#xff0c; IANA對外宣布&#xff1a;IPv4地址空間最后5個地址塊已經被分配給下屬的5個地區委員會。2011年4月15日&#xff0c;亞太區委員會APNIC對外宣布&#xff0c;除了個別保留地址外&#xff0c;本區域所有的IPv4地址基本耗盡…

C++ 常用查找算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <algorithm> using namespace std; #include <vector> #include <string> #include <functional> /* find算法 查找元素 param beg 容器開始迭代器 param end 容器結束迭代器 para…

CentOS7卸載并安裝mysql教程

MySQL安裝 先卸載其他 刪除Mysql yum remove mysql mysql-server mysql-libs mysql-server;find / -name mysql 將找到的相關東西delete掉(rm -rf /var/lib/mysql)&#xff1b;rpm -qa|grep mysql(查詢出來的東東yum remove掉) rm /etc/my.cnf查看是否還有mysql軟件&#x…

C++ 常用排序算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; #include <algorithm> #include <vector> #include <functional> #include <ctime> /* merge算法 容器元素合并&#xff0c;并存儲到另一容器中 這兩個容器 必須也是…

排序穩定性的意義

首先&#xff0c;為什么會有排序算法穩定性的說法&#xff1f;只要能排好不就可以了嗎&#xff1f; 看例子 第1行是數字2 記作 1 2 第2行是數字4 記作 2 4 第3行是數字2 記作 3 2 排序后的結果&#xff08;如果看不懂命令的意思&#xff0c;參照這個博客&#xff09; 那么引入…

C++ 常用拷貝和替換算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <vector> #include <algorithm> #include <iterator> using namespace std;/* copy算法 將容器內指定范圍的元素拷貝到另一容器中 param beg 容器開始迭代器 param end 容器結束迭代器 p…

防火墻的基礎知識入門

文章目錄防火墻基于實現方式&#xff0c;防火墻的發展分為四個階段:Linux 環境中主要的防火墻形式TCP wrappers~~詳解~~ 粗解Tcp wrappers的認識它的基本過程是這樣的&#xff1a;iptable攻擊和防御DDOS 攻擊常見的可能受到 DDOS 攻擊體現的癥狀有&#xff1a;而常見的 DDOS 攻…

C++ 常用算數生成算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <vector> using namespace std; #include <algorithm> //不好使 #include <numeric> //好使 #include <iterator> /* accumulate算法 計算容器元素累計總和 param beg 容器開始迭代…

fork()請問下面的程序一共輸出多少個“A”?多少個-?

題目&#xff1a;請問下面的程序一共輸出多少個“-”&#xff1f; #include #include #include int main(void) { int i; for(i0; i<2; i){ fork(); printf("-"); } return 0; } 解析&#xff1a;一共輸出8個。 首先程序一開始&am…