《STL 六大組件之容器篇:簡單了解 list》

目錄

  • 一、list 簡介
  • 二、list 的常用接口
    • 1. 構造函數(constructor )
    • 2. 迭代器(iterator)
    • 3. 容量、修改和訪問(capacity 、modify and access)

一、list 簡介

??簡單來說,list 就是數據結構初階中學習的鏈表,還是所有特性都具備的帶頭雙向循環鏈表。帶頭是為了更好地適應迭代器,雙向循環是為了插入和刪除的效率。與之前學習的 list 相比,本次學習的 list 升級成為了類模板且增加了迭代器。

二、list 的常用接口

??下面介紹一下 list 各方面的常用接口。

1. 構造函數(constructor )

??下面是 list 常用的四個構造函數的聲明和使用。

(1)函數聲明

// list 構造函數聲明// 1. 默認構造函數
list();
// 2. 指定個數和初始值
list(size_t n, const T& value = T());
// 3. 迭代器構造函數
template<class Iterator>
list(Iterator first, Iterator last);
// 4. 復制構造函數
list(const list<T>& lt);

(2)使用演示

// 1. constructor
void test1()
{// 1. 默認構造函數list<int> lt1;cout << "lt1.size: " << lt1.size() << endl << endl;// 2. 指定個數和初始值list<int> lt2(5, 1);cout << "lt2.size: " << lt2.size() << endl;cout << "lt2: ";for (const auto& e : lt2)cout << e << " ";cout << endl << endl;// 3. 迭代器構造函數vector<int> vt_i;for (int i = 1; i < 5; ++i)vt_i.push_back(i);list<int> lt3(vt_i.begin(), vt_i.end());cout << "lt3.size: " << lt3.size() << endl;cout << "lt3: ";for (const auto& e : lt3)cout << e << " ";cout << endl << endl;// 4. 拷貝構造函數list<int> lt4(lt3);cout << "lt4.size: " << lt4.size() << endl;cout << "lt4: ";for (const auto& e : lt4)cout << e << " ";cout << endl << endl;
}

(3)運行結果
在這里插入圖片描述

2. 迭代器(iterator)

??下面介紹 list 常用的四個迭代器。反向迭代器參考正向迭代器的用法。

(1)函數聲明

// 1. 普通迭代器
iterator begin();
iterator end();
// 2. const 迭代器
const_iterator begin() const;
const_iterator end() const;
// 3. 反向迭代器
reverse_iterator rbegin();
reverse_iterator rend();
// 4. const 反向迭代器
const_reverse_iterator rbegin() const;
const_reverse_iterator rend() const;

(2)使用演示

// 2. 迭代器
void test2()
{list<int> lt1;for (int i = 1; i < 10; ++i)lt1.push_back(i);// 1. 正向迭代器遍歷list<int>::iterator it = lt1.begin();while (it != lt1.end()){cout << *it << " ";++it;}cout << endl;// 2. 反向迭代器遍歷list<int>::reverse_iterator rit = lt1.rbegin();while (rit != lt1.rend()){cout << *rit << " ";++rit;}cout << endl;
}

(3)運行結果
在這里插入圖片描述

3. 容量、修改和訪問(capacity 、modify and access)

??下面分別介紹 list 的 2 個與容量有關的接口、2 個與訪問有關的接口,8 個與修改有關的接口。

(1)函數聲明
??下面的 T 是模版中的類型參數。

// 1. capacity
size_t size() const;
bool empty() const;// 2. access
T& front();
T& back();// 3. modify
void push_front(const T& value);
void push_back(const T& value);
void pop_front();
void pop_back();
iterator insert(iterator pos, const T& value);  // 在 pos 位置前插入
iterator erase(iterator pos);  // 刪除 pos 位置

(2)使用演示

// 3. capacity、access and modify
void test3()
{// 1. capacitylist<int> lt1;if (lt1.empty()){cout << "lt1 is empty.\n";}for (int i = 1; i < 10; ++i)lt1.push_back(i);cout << "lt1.size: " << lt1.size() << endl << endl;// 2. accesscout << "lt1.front: " << lt1.front() << endl;cout << "li1.back: " << lt1.back() << endl;// 3. modifylist<int> lt2;// 插入lt2.push_back(1);lt2.push_front(2);// 打印for (const auto& e : lt2)cout << e << " ";cout << endl;// 插入lt2.insert(lt2.begin(), 10);lt2.insert(lt2.end(), 99);// 打印for (const auto& e : lt2)cout << e << " ";cout << endl;// 刪除lt2.pop_back();lt2.pop_front();// 打印for (const auto& e : lt2)cout << e << " ";cout << endl;// 刪除lt2.erase(lt2.begin());lt2.erase(--lt2.end());// 打印for (const auto& e : lt2)cout << e << " ";cout << endl;
}

(3)運行結果
在這里插入圖片描述

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

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

相關文章

nmslib 是一個 超快、適用于高維向量的最近鄰搜索庫,基于 HNSW 算法,被廣泛用于 語義搜索、推薦系統、人臉識別等任務

nmslib 是什么&#xff1f; nmslib&#xff08;Non-Metric Space Library&#xff09;是一個 高效的最近鄰搜索&#xff08;ANN, Approximate Nearest Neighbor Search&#xff09; 庫&#xff0c;專門用于 高維向量搜索&#xff0c;適用于 文本、圖像、語音等嵌入向量 的相似…

前端流式輸出實現詳解:從原理到實踐

前端流式輸出實現詳解&#xff1a;從原理到實踐 前言一、流式輸出核心原理1.1 什么是流式輸出&#xff1f;1.2 技術優勢對比1.3 關鍵技術支撐 二、原生JavaScript實現方案2.1 使用Fetch API流式處理關鍵點解析&#xff1a; 2.2 處理SSE&#xff08;Server-Sent Events&#xff…

【STM32】最后一刷-江科大Flash閃存-學習筆記

FLASH簡介 STM32F1系列的FLASH包含程序存儲器、系統存儲器和選項字節三個部分&#xff0c;通過閃存存儲器接口&#xff08;外設&#xff09;可以對程序存儲器和選項字節進行擦除和編程&#xff0c;&#xff08;系統存儲器用于存儲原廠寫入的BootLoader程序&#xff0c;用于串口…

梯度(Gradient)與步長(Step Size)

梯度&#xff08;Gradient&#xff09;與步長&#xff08;Step Size&#xff09; 梯度與步長是優化算法&#xff08;如梯度下降法&#xff09;的核心概念。以下是它們的詳細解釋&#xff1a; 梯度&#xff08;Gradient&#xff09; ?定義 梯度是一個向量&#xff0c;表示多元…

freecad二開 xmlrpc接口api qtgui

FreeCAD.ConfigGet("UserAppData") 文件夾下創建mod文件夾 mod文件夾底下創建插件文件夾my_server: freecad_server.py&#xff1a; from xmlrpc.server import SimpleXMLRPCServer import FreeCADGui import FreeCADimport queue from PySide2.QtCore import QTi…

鴻蒙NEXT開發日志工具類(ArkTs)

import hilog from ohos.hilog; import { JSON } from kit.ArkTS; import { BusinessError } from kit.BasicServicesKit; import { StrUtil } from ./StrUtil;/*** 日志工具類* author: 鴻蒙布道師* since: 2024/03/31*/ export class LogUtil {private static logSize: numbe…

《Linux運維總結:基于銀河麒麟V10+ARM64架構CPU源碼編譯部署單實例redis7.2.6》

總結&#xff1a;整理不易&#xff0c;如果對你有幫助&#xff0c;可否點贊關注一下&#xff1f; 更多詳細內容請參考&#xff1a;《Linux運維篇&#xff1a;Linux系統運維指南》 一、環境信息 環境信息如下&#xff1a; 主機IP 操作系統 Redis版本 CPU架構 192.168.1.111 K…

基于LSTM的文本分類1——模型搭建

源碼 # coding: UTF-8 import torch import torch.nn as nn import torch.nn.functional as F import numpy as npclass Config(object):"""配置參數類&#xff0c;用于存儲模型和訓練的超參數"""def __init__(self, dataset, embedding):self.…

小了 60,500 倍,但更強;AI 的“深度詛咒”

作者&#xff1a;Ignacio de Gregorio 圖片來自 Unsplash 的 Bahnijit Barman 幾周前&#xff0c;我們看到 Anthropic 嘗試訓練 Claude 去通關寶可夢。模型是有點進展&#xff0c;但離真正通關還差得遠。 但現在&#xff0c;一個獨立的小團隊用一個只有一千萬參數的模型通關了…

nextjs使用02

并行路由 同一個頁面&#xff0c;放多個路由&#xff0c;&#xff0c; 目錄前面加,layout中可以當作插槽引入 import React from "react";function layout({children,notifications,user}:{children:React.ReactNode,notifications:React.ReactNode,user:React.Re…

github 無法在shell里鏈接

當我在shell端git push時&#xff0c;我發現總是22 timeout的問題。 我就進行了以下步驟的嘗試并最終得到了解決。 第一步&#xff0c;我先確定我可以curl github&#xff0c;也就是我網絡沒問題 curl -v https://github.com 如果這個時候不超時和報錯&#xff0c;說明網絡…

當前主流的大模型知識庫軟件對比分析

以下是當前主流的大模型知識庫軟件對比分析&#xff0c;涵蓋功能特性、適用場景及優劣勢&#xff0c;結合最新技術動態和行業實踐提供深度選型參考&#xff1a; 一、企業級智能知識庫平臺 1. 阿里云百煉&#xff08;Model Studio&#xff09; 核心能力&#xff1a;基于RAG技…

Java的比較器 Comparable 和 Comparator

在 Java 中&#xff0c;Comparable 和 Comparator 是用于對象排序的重要接口。它們提供了不同的排序方式&#xff0c;適用于不同的需求&#xff0c;同時在 Java 底層排序算法中發揮著關鍵作用。本文將從基礎概念、使用方法、排序實現&#xff08;包括升序、降序&#xff09;、底…

基于Qlearning強化學習的太赫茲信道信號檢測與識別matlab仿真

目錄 1.算法仿真效果 2.算法涉及理論知識概要 2.1 太赫茲信道特性 2.2 Q-learning強化學習基礎 2.3 基于Q-learning 的太赫茲信道信號檢測與識別系統 3.MATLAB核心程序 4.完整算法代碼文件獲得 1.算法仿真效果 matlab2024b仿真結果如下&#xff08;完整代碼運行后無水印…

力扣刷題————199.二叉樹的右視圖

給定一個二叉樹的 根節點 root&#xff0c;想象自己站在它的右側&#xff0c;按照從頂部到底部的順序&#xff0c;返回從右側所能看到的節點值。 示例 1&#xff1a; 輸入&#xff1a;root [1,2,3,null,5,null,4] 輸出&#xff1a;[1,3,4] 解題思路&#xff1a;我們可以想到這…

文件包含漏洞的小點總結

文件本地與遠程包含&#xff1a; 文件包含有本地包含與遠程包含的區別&#xff1a;本地包含只能包含服務器已經有的問題&#xff1b; 遠程包含可以包含一切網絡上的文件。 本地包含&#xff1a; ①無限制 感受一下使用phpstudy的文件上傳&#xff0c;開啟phpstudy的apache…

深度學習處理時間序列(5)

Keras中的循環層 上面的NumPy簡單實現對應一個實際的Keras層—SimpleRNN層。不過&#xff0c;二者有一點小區別&#xff1a;SimpleRNN層能夠像其他Keras層一樣處理序列批量&#xff0c;而不是像NumPy示例中的那樣只能處理單個序列。也就是說&#xff0c;它接收形狀為(batch_si…

操作系統相關知識點

操作系統在進行線程切換時需要進行哪些動作&#xff1f; 保存當前線程的上下文 保存寄存器狀態、保存棧信息。 調度器選擇下一個線程 調度算法決策&#xff1a;根據策略&#xff08;如輪轉、優先級、公平共享&#xff09;從就緒隊列選擇目標線程。 處理優先級&#xff1a;實時…

從0到1:Rust 如何用 FFmpeg 和 OpenGL 打造硬核視頻特效

引言&#xff1a;視頻特效開發的痛點&#xff0c;你中了幾個&#xff1f; 視頻特效如今無處不在&#xff1a;短視頻平臺的濾鏡美化、直播間的實時美顏、影視后期的電影級調色&#xff0c;甚至 AI 生成內容的動態效果。無論是個人開發者還是團隊&#xff0c;視頻特效都成了吸引…

【并發編程 | 第一篇】線程相關基礎知識

1.并發和并行有什么區別 并發是指多核CPU上的多任務處理&#xff0c;多個任務在同一時刻真正同時執行。 并行是指單核CPU上的多任務處理&#xff0c;多個任務在同一時間段內交替執行&#xff0c;通過時間片輪轉實現交替執行&#xff0c;用于解決IO密集型瓶頸。 如何理解線程安…