【STL】C++ list 基本使用

目錄

一 list 常見構造

1 空容器構造函數(默認構造函數)

2 Fill 構造函數

3 Range 構造函數

4 拷貝構造函數

二 list迭代器

1 begin && end

2 rbegin && rend

三 list?容量操作

四 list?修改操作

1 assign?

2? push_front && pop_back

3 push_back && pop_back

4? insert

5 erase

6 swap

7. resize

8 clear

9 關于 emplace系列操作說明

五 list 元素訪問

六 其他操作

1?splice

2 remove

3 unique

4 sort

5? reverse?

七 總結?


一 list 常見構造

1 空容器構造函數(默認構造函數)

構造一個沒有元素的空容器。

2 Fill 構造函數

構造一個包含?n?個元素的容器。每個元素都是?val?的副本。

3 Range 構造函數

構造一個容器,其中包含與范圍?[first,last]?一樣多的元素,每個元素都按相同的順序從該范圍中的相應元素構造而成。

4 拷貝構造函數

構造一個容器,其中包含?x?中每個元素的副本,順序相同。

#include<iostream>
#include<list>
using namespace std;void Print(list<int>& lt)
{list<int>:: iterator it = lt.begin();while (it != lt.end()){cout << *it << " ";it++;}cout << endl;
}int main()
{list<int> a;list<int> b(4, 100);list<int> c(4);list<int> d(b.begin(), b.end());list<int> e(b);cout << "b: ";Print(b);cout << "c: ";Print(c);cout << "d: ";Print(d);cout << "e: ";Print(e);return 0;
}

C++11構造

void Print(list<int>& lt)
{list<int>:: iterator it = lt.begin();while (it != lt.end()){cout << *it << " ";it++;}cout << endl;
}int main()
{list<int> lt1{ 1, 2, 3, 4, 5 };Print(lt1);return 0;
}

?

二 list迭代器

list模式和vector如出一轍

注意:

ist的迭代器是支持++--操作的(前后綴都支持)
但是不支持+-操作,因為鏈表不能進行隨機訪問操作,只能O(n)查詢

1 begin && end

iterator begin();const_iterator begin() const;
iterator end();const_iterator end() const;
void Test3()
{list<int> lt(4, 1);list<int>::iterator it = lt.begin();while (it != lt.end()){cout << *it << ' ';++it;}cout << endl;const list<int> llt(4, 10);list<int>::const_iterator itt = llt.begin();while (itt != llt.end()){cout << *itt << ' ';++itt;}}

2 rbegin && rend

reverse_iterator rbegin();const_reverse_iterator rbegin() const;
reverse_iterator rend();const_reverse_iterator rend() const;
void Test4()
{list<int> lt(5);list<int>::reverse_iterator it = lt.rbegin();int i = 1;while (it != lt.rend()){*it += i;++it;++i;}for (auto e : lt){cout << e << ' ';}}

三 list?容量操作

?這里直接代碼演示

void Test5()
{list<int> lt1;if (lt1.empty()) cout << "empty" << endl;else cout << "full" << endl;list<int> lt2{ 1, 2, 3, 4 };cout << "lt1: " << lt1.size() << "  lt2: " << lt2.size() << endl;
}

四 list?修改操作

1 assign?

將新內容分配給 list?容器,替換其當前內容,并相應地修改其大小。

range (1)	
template <class InputIterator>  void assign (InputIterator first, InputIterator last);
fill (2)	
void assign (size_type n, const value_type& val);
void Test6()
{std::list<int> first;std::list<int> second;first.assign(7, 100);                      second.assign(first.begin(), first.end()); int myints[] = {1776,7,4 };first.assign(myints, myints + 3);            cout << "first: ";for (auto e : first){cout << e << " ";}cout << endl;cout << "second: ";for (auto e : second){cout << e << " ";}cout << endl;
}

?

2? push_front && pop_back

void push_front (const value_type& val);
void pop_front();
void Test7()
{list<int> lt = { 1, 2 };lt.push_front(100);for (auto e : lt){cout << e << " ";}cout << endl;lt.pop_front();for (auto e : lt){cout << e << " ";}cout << endl;
}

?

3 push_back && pop_back

void push_back (const value_type& val);
void pop_back();
void Test8()
{list<int> lt = { 1, 2 };lt.push_back(100);for (auto e : lt){cout << e << " ";}cout << endl;lt.pop_back();for (auto e : lt){cout << e << " ";}cout << endl;
}

4? insert

指定位置的元素之前插入新元素來擴展容器,從而有效地通過插入的元素數增加容器大小

single element (1)	
iterator insert (iterator position, const value_type& val);fill (2)	void insert (iterator position, size_type n, const value_type& val);range (3)	
template <class InputIterator>    void insert (iterator position, InputIterator first, InputIterator last);
void Test9()
{list<int> lt(4, 10);lt.insert(lt.begin(), 100);for (auto e : lt){cout << e << ' ';}cout << endl;lt.insert(lt.end(), 4, 100);for (auto e : lt){cout << e << ' ';}cout << endl;}

5 erase

從容器中刪除單個元素 (position) 或一系列元素 ( [first,last))

iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
void Test10()
{list<int> lt{ 1, 2, 3, 4, 5, 6};lt.erase(lt.begin());for (auto e : lt){cout << e << ' ';}cout << endl;lt.erase(++lt.begin(), lt.end());for (auto e : lt){cout << e << ' ';}
}

6 swap

?通過 x 的內容交換容器的內容,x 是另一個相同類型的容器對象。size可能有所不同。

void swap (list& x);
void Test11()
{list<int> l1(4, 10);list<int> l2(4, 1);l1.swap(l2);cout << "l1: ";for (auto e : l1){cout << e << ' ';}cout << endl;cout << "l2: ";for (auto e : l2){cout << e << ' ';}  
}

7. resize

調整容器的大小,使其包含 n 個元素。

void resize (size_type n);
void resize (size_type n, const value_type& val);

如果?n?小于當前容器大小,則內容將減少到其前?n?個元素,刪除超出(并銷毀它們)的元素。

如果?n?大于當前容器大小,則通過在末尾插入所需數量的元素來擴展內容,以達到?n?的大小。

如果指定了?val,則新元素將初始化為?val?的副本,否則,它們將進行值初始化(0)。

void Test12()
{list<int> mylist;for (int i = 1; i < 10; ++i) mylist.push_back(i);mylist.resize(5);cout << "mylist contains:";for (std::list<int>::iterator it = mylist.begin(); it != mylist.end(); ++it)std::cout << ' ' << *it;cout << endl;mylist.resize(8, 100);cout << "mylist contains:";for (std::list<int>::iterator it = mylist.begin(); it != mylist.end(); ++it)std::cout << ' ' << *it;cout << endl;mylist.resize(12);cout << "mylist contains:";for (std::list<int>::iterator it = mylist.begin(); it != mylist.end(); ++it)std::cout << ' ' << *it;cout << endl;}

8 clear

?從容器中刪除所有元素(這些元素被銷毀),使容器的大小為0。

void clear() noexcept;
void Test13()
{list<int> lt(1, 4);lt.clear();cout << lt.size() << endl;for (auto e : lt){cout << e << ' ';}cout << endl;
}

9 關于 emplace系列操作說明

這個系列的操作放在 右值引用講解完之后再講, 這樣才能更好的理解. 大家不需要著急的, 因為 上面講的完全夠用, 而且emplace 是優化, 并不是其他功能

五 list 元素訪問

?

void Test13()
{list<int> lt{ 1, 2, 3, 4 };cout << lt.front() << endl;cout << lt.back() << endl;
}

六 其他操作

1?splice

將元素從一個列表轉移到另一個列表

void splice(iterator position, list& x);
將?x?的所有元素轉移到容器中void splice(iterator position, list& x, iterator i);
僅將?i?指向的元素從?x?傳輸到容器中void splice(iterator position, list& x, iterator first, iterator last);
將范圍?[first,last)?從?x?傳輸到容器中。
void Test14()
{list<int> mylist1 = { 1, 2, 3, 4 }, mylist2 = { 10, 20, 30 };list<int>::iterator it = mylist1.begin();++it;         // points to 2mylist1.splice(it, mylist2); // mylist1: 1 10 20 30 2 3 4cout << "mylist1:  ";for (auto e : mylist1){cout << e << " ";}cout << endl;cout << "mylist2:  ";for (auto e : mylist2){cout << e << " ";}cout << endl;mylist2.splice(mylist2.begin(), mylist1, mylist1.begin());cout << "mylist1:  ";for (auto e : mylist1){cout << e << " ";}cout << endl;cout << "mylist2:  ";for (auto e : mylist2){cout << e << " ";}cout << endl;mylist1.splice(mylist1.begin(), mylist2, mylist2.begin(), mylist2.end());cout << "mylist1:  ";for (auto e : mylist1){cout << e << " ";}cout << endl;cout << "mylist2:  ";for (auto e : mylist2){cout << e << " ";}cout << endl;
}

2 remove

從容器中刪除所有與?val相等的元素。這將調用這些對象的析構函數,并通過刪除的元素數來減小容器大小。

vvoid remove (const value_type& val);
int main()
{list<int> lt;lt.push_back(1);lt.push_back(2);lt.push_back(2);lt.push_back(4);lt.push_back(5);cout << lt.size() << endl;lt.remove(2);for (auto e : lt){cout << e << " ";}cout << endl;cout << lt.size() << endl;return 0;
}

3 unique

從容器中每個連續的相等元素組中刪除除第一個元素之外的所有元素。請注意,只有當某個元素與其前面的元素相等時,該元素才會從列表容器中刪除。因此,此函數對于排序列表特別有用。

void unique();
int main()
{list<int> lt;lt.push_back(1);lt.push_back(1);lt.push_back(2);lt.push_back(4);lt.push_back(2);lt.push_back(2);lt.push_back(4);lt.push_back(3);lt.push_back(5);for (auto e : lt){cout << e << " ";}cout << endl;lt.sort();//需要先排序lt.unique();for (auto e : lt){cout << e << " ";}cout << endl;return 0;
}

4 sort

對容器中的元素進行排序

對列表?中的元素進行排序,改變它們在容器中的位置。

void sort();
void Test15()
{list<int> lt{ 2, 1, 2, 4, 10, 11, 99, 88 };lt.sort();for (auto e : lt){cout << e << " ";}}

5? reverse?

反轉列表容器 中元素的順序

void reverse()void reverse()
int main()
{list<int> lt;lt.push_back(1);lt.push_back(2);lt.push_back(3);lt.push_back(4);lt.push_back(5);for (auto e : lt){cout << e << " ";}cout << endl;lt.reverse();for (auto e : lt){cout << e << " ";}cout << endl;return 0;
}

七 總結?

list終于抽時間寫完了, 首先本節大多數代碼實驗, 理論講解少, 還是那句話, 如果對概念不清楚, 請到 string看, 或者翻閱文檔, 這些都是最基本的素養.? list 很多操作和 vector一樣的, 但也有差別, 注意區分即可.

今天去中醫看病, 醫生說 眼睛就是你的腎, 舌頭是你的心臟, 大家一定注意飲食規律, 不要久坐啊.

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

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

相關文章

【深度學習中的數據預處理技巧:提升模型性能的關鍵步驟】

文章目錄 前言數據標準化&#xff08;Normalization&#xff09;數據增強&#xff08;Data Augmentation&#xff09;缺失值處理&#xff08;Handling Missing Values&#xff09;特征編碼&#xff08;Feature Encoding&#xff09;結論 前言 在深度學習領域&#xff0c;數據預…

牛客NC362 字典序排列【中等 DFS Java/Go/PHP】

題目 題目鏈接&#xff1a; https://www.nowcoder.com/practice/de49cf70277048518314fbdcaba9b42c 解題方法 DFS&#xff0c;剪枝Java代碼 import java.util.*;public class Solution {/*** 代碼中的類名、方法名、參數名已經指定&#xff0c;請勿修改&#xff0c;直接返回…

【小筆記】如何在docker中更新或導入neo4j數據?

如何在docker中更新或導入neo4j數據&#xff1f; &#xff08;1&#xff09;背景&#xff1a; 我嘗試了4.4.9和5.19.0版本的Neo4j社區版&#xff0c;基于他們的鏡像創建容器后&#xff0c;需要導入我準備好的csv文件或dump文件&#xff0c;因為數據量非常大&#xff0c;所以采…

2024電工杯數學建模B題Python代碼+結果表數據教學

2024電工杯B題保姆級分析完整思路代碼數據教學 B題題目&#xff1a;大學生平衡膳食食譜的優化設計及評價 以下僅展示部分&#xff0c;完整版看文末的文章 import pandas as pd df1 pd.read_excel(附件1&#xff1a;1名男大學生的一日食譜.xlsx) df1# 獲取所有工作表名稱 e…

HarmonyOS-MPChart繪制一條虛實相接的曲線

本文是基于鴻蒙三方庫mpchart&#xff08;OpenHarmony-SIG/ohos-MPChart&#xff09;的使用&#xff0c;自定義繪制方法&#xff0c;繪制一條虛實相接的曲線。 mpchart本身的繪制功能是不支持虛實相接的曲線的&#xff0c;要么完全是實線&#xff0c;要么完全是虛線。那么當我…

面試總結之:socket線路切換

"socket線路切換"通常指的是在網絡通信過程中,根據當前網絡狀態或策略來動態更換數據傳輸路徑的技術。這種技術可以提高通信的可靠性和性能。 在實際應用中,線路切換可能涉及到多種技術,例如: 負載均衡:根據每條路徑的當前負載情況,動態地選擇一條較為空閑的路…

MySql超大Sql文件導入效率優化 —— 筑夢之路

使用場景 日常我們對mysql數據庫、mariadb數據庫進行定時備份&#xff0c;而隨著時間增長&#xff0c;導出來的備份文件越來越大&#xff0c;使用備份sql文件進行還原的時候&#xff0c;大文件非常慢&#xff0c;有些要執行很長時間&#xff0c;效率很低。 如何優化&#xff…

根據多個坐標經緯度獲取到中心點的經緯度,scala語言

文章目錄 前言scala 代碼 總結 前言 Scala 語言 通過多個經緯度坐標點, 計算出中心點, 這里使用的是 Scala 語言,其他的語言需要自行轉換。求出來的并不是原有的點&#xff0c;而是原有點的中心位置的點。 scala 代碼 package com.dw.process.midimport java.lang.Double.pa…

C語言 | Leetcode C語言題解之第97題交錯字符串

題目&#xff1a; 題解&#xff1a; bool isInterleave(char* s1, char* s2, char* s3) {int n strlen(s1), m strlen(s2), t strlen(s3);int f[m 1];memset(f, 0, sizeof(f));if (n m ! t) {return false;}f[0] true;for (int i 0; i < n; i) {for (int j 0; j &l…

基于UDP的tftp的文件傳輸

#define SER_PORT 69 #define SER_IP "192.168.125.71" #define CLT_PORT 6666 #define CLT_IP "192.168.125.158" int main(int argc, const char *argv[]) {//創建套接字文件描述符int cfd socket(AF_INET,SOCK_DGRAM,0);if(cfd -1){perror("sock…

vue2-computed,vue3+watch 前端實現列表搜索,結合filter+some+indexOf

vue2 computed實現 computed: {FBAAddressListComputed () {if (!this.fbaInput) return this.FBAAddressListconst lowerCaseInput this.fbaInput.toLowerCase()return this.FBAAddressList.filter((item) > {return [item.fbaCode, item.zipCode, item.countryCode, ite…

六(3)、RTKLIB源碼解析 — [postpos]: execses(antpos, outhead, procpos)

目錄 一、antpos() 1.1 avepos() 1.2 getstapos() 二、outhead() 三、procpos() 3.1 inputobs() 3.1.1 nexto

牛客周賽 Round 42

小紅叕戰小紫 #include<bits/stdc.h> using namespace std; void solve(){string s;cin>>s;if(s.length()<1)cout<<"yukari";else cout<<"kou"<<endl; } int main(){ios::sync_with_stdio(false), cin.tie(0), cout.tie…

Qt時間類、日期類、時間日期類介紹

一.時間類&#xff08;QTime&#xff09; Qt中的時間類QTime是用來處理時間的類&#xff0c;它可以表示一個特定的時間&#xff0c;精確到毫秒。QTime類提供了一些方法來訪問和操作時間&#xff0c;例如獲取小時、分鐘、秒以及毫秒部分&#xff0c;還可以進行時間的比較和運算。…

Python列表,元組,集合,字典詳解一篇搞懂

目錄 介紹 列表(List) 集合(Set) 字典(Dict) 元組(Tuple) 列表 列表定義 ?編輯 列表切片 列表常用方法 append extend ?編輯 insert ?編輯 remove pop ?編輯 clear ?編輯 列表修改元素 sort 升序 倒序 reverse count ?編輯 index 淺拷貝和深拷貝 …

《書生·浦語大模型實戰營》第一課 學習筆記:書生·浦語大模型全鏈路開源體系

文章大綱 1. 簡介與背景智能聊天機器人與大語言模型目前的開源智能聊天機器人與云上運行模式 2. InternLM2 大模型 簡介3. 視頻筆記&#xff1a;書生浦語大模型全鏈路開源體系內容要點從模型到應用典型流程全鏈路開源體系 4. 論文筆記:InternLM2 Technical Report簡介軟硬件基礎…

基于Java的地震震中附近城市分析實戰

目錄 前言 一、空間數據說明 1、空間查詢 二、Java后臺開發 1、模型層設計與實現 2、控制層設計與實現 三、Leaflet地圖開發 1、地震震中位置展示 2、附近城市展示 3、成果展示 總結 前言 隨著全球氣候變化和地殼活動的不斷演變&#xff0c;地震作為一種自然災害&…

第十三節:帶你梳理Vue2 : watch偵聽器

官方解釋:> 觀察 Vue 實例變化的一個表達式或計算屬性函數。回調函數得到的參數為新值和舊值。表達式只接受監督的鍵路徑。對于更復雜的表達式&#xff0c;用一個函數取代<br/>## 1. 偵聽器的基本使用偵聽器可以監聽data對象屬性或者計算屬性的變化watch是觀察屬性的…

現代C++ 如何使用 Lambda 使代碼更具表現力、更容易理解?

使用 Lambda 使代碼更具表現力 一、Lambda VS. 仿函數二、總結 一、Lambda VS. 仿函數 Lambda 是 C11 中最引人注目的語言特性之一。它是一個強大的工具&#xff0c;但必須正確使用才能使代碼更具表現力&#xff0c;而不是更難理解。 首先&#xff0c;要明確的是&#xff0c;…

向npm發布自己寫的vue組件,使用vite創建項目

向npm發布自己寫的vue組件&#xff0c;使用vite創建項目 創建項目 pnpm create vite輸入項目名稱 由于我的組件是基于 ant-design-vue和vue的&#xff0c;需要解析.vue文件&#xff0c;我又安裝了下面4個。 然后執行 pnpm i安裝依賴 vite.config.ts import { defineC…