1. 程式人生 > >C++list的使用總結及常用list操作

C++list的使用總結及常用list操作

一、List定義:

List是stl實現的雙向連結串列,與向量(vectors)相比, 它允許快速的插入和刪除,但是隨機訪問卻比較慢。使用時需要新增標頭檔案

#include <list>

二、List定義和初始化:

    list<int>lst1;          //建立空list

    list<int> lst2(5);       //建立含有5個元素的list

    list<int>lst3(3,2);  //建立含有3個元素的list

    list<int>lst4(lst2);    //使用lst2初始化lst4

    list<int>lst5(lst2.begin(),lst2.end());  //同lst4

三、List常用操作函式:

Lst1.assign() 給list賦值 
Lst1.back() 返回最後一個元素 
Lst1.begin() 返回指向第一個元素的迭代器 
Lst1.clear() 刪除所有元素 
Lst1.empty() 如果list是空的則返回true 
Lst1.end() 返回末尾的迭代器 
Lst1.erase() 刪除一個元素 
Lst1.front() 返回第一個元素 
Lst1.get_allocator() 返回list的配置器 
Lst1.insert() 插入一個元素到list中 
Lst1.max_size() 返回list能容納的最大元素數量 
Lst1.merge() 合併兩個list 
Lst1.pop_back() 刪除最後一個元素 
Lst1.pop_front() 刪除第一個元素 
Lst1.push_back() 在list的末尾新增一個元素 
Lst1.push_front() 在list的頭部新增一個元素 
Lst1.rbegin() 返回指向第一個元素的逆向迭代器 
Lst1.remove() 從list刪除元素 
Lst1.remove_if() 按指定條件刪除元素 
Lst1.rend() 指向list末尾的逆向迭代器 
Lst1.resize() 改變list的大小 
Lst1.reverse() 把list的元素倒轉 
Lst1.size() 返回list中的元素個數 
Lst1.sort() 給list排序 
Lst1.splice() 合併兩個list 
Lst1.swap() 交換兩個list 
Lst1.unique() 刪除list中重複的元素

四、List使用示例:

示例1:遍歷List

    //迭代器法

  for(list<int>::const_iteratoriter = lst1.begin();iter != lst1.end();iter++)
    {
      cout<<*iter;
    }
    cout<<endl;

示例2:

#include <iostream>
#include <list>
#include <numeric>
#include <algorithm>
#include <windows.h>
using namespace std;
 
typedef list<int> LISTINT;
typedef list<int> LISTCHAR;
 
void main()
{
    //用LISTINT建立一個list物件
    LISTINT listOne;
    //宣告i為迭代器
    LISTINT::iterator i;
 
    listOne.push_front(3);
    listOne.push_front(2);
    listOne.push_front(1);
 
    listOne.push_back(4);
    listOne.push_back(5);
    listOne.push_back(6);
 
    cout << "listOne.begin()--- listOne.end():" << endl;
    for (i = listOne.begin(); i != listOne.end(); ++i)
        cout << *i << " ";
    cout << endl;
 
    LISTINT::reverse_iterator ir;
    cout << "listOne.rbegin()---listOne.rend():" << endl;
    for (ir = listOne.rbegin(); ir != listOne.rend(); ir++) {
        cout << *ir << " ";
    }
    cout << endl;
 
    int result = accumulate(listOne.begin(), listOne.end(), 0);
    cout << "Sum=" << result << endl;
    cout << "------------------" << endl;
 
    //用LISTCHAR建立一個list物件
    LISTCHAR listTwo;
    //宣告i為迭代器
    LISTCHAR::iterator j;
 
    listTwo.push_front('C');
    listTwo.push_front('B');
    listTwo.push_front('A');
 
    listTwo.push_back('D');
    listTwo.push_back('E');
    listTwo.push_back('F');
 
    cout << "listTwo.begin()---listTwo.end():" << endl;
    for (j = listTwo.begin(); j != listTwo.end(); ++j)
        cout << char(*j) << " ";
    cout << endl;
 
    j = max_element(listTwo.begin(), listTwo.end());
    cout << "The maximum element in listTwo is: " << char(*j) << endl;
    Sleep(10000);
}
 


#include <iostream> 
#include <list> 
#include <windows.h>

using namespace std;
typedef list<int> INTLIST;

//從前向後顯示list佇列的全部元素 
void put_list(INTLIST list, char *name)
{
	INTLIST::iterator plist;

	cout << "The contents of " << name << " : ";
	for (plist = list.begin(); plist != list.end(); plist++)
		cout << *plist << " ";
	cout << endl;
}

//測試list容器的功能 
void main(void)
{
	//list1物件初始為空 
	INTLIST list1;
	INTLIST list2(5, 1);
	INTLIST list3(list2.begin(), --list2.end());

	//宣告一個名為i的雙向迭代器 
	INTLIST::iterator i;

	put_list(list1, "list1");
	put_list(list2, "list2");
	put_list(list3, "list3");

	list1.push_back(7);
	list1.push_back(8);
	cout << "list1.push_back(7) and list1.push_back(8):" << endl;
	put_list(list1, "list1");

	list1.push_front(6);
	list1.push_front(5);
	cout << "list1.push_front(6) and list1.push_front(5):" << endl;
	put_list(list1, "list1");

	list1.insert(++list1.begin(), 3, 9);
	cout << "list1.insert(list1.begin()+1,3,9):" << endl;
	put_list(list1, "list1");

	//測試引用類函式 
	cout << "list1.front()=" << list1.front() << endl;
	cout << "list1.back()=" << list1.back() << endl;

	list1.pop_front();
	list1.pop_back();
	cout << "list1.pop_front() and list1.pop_back():" << endl;
	put_list(list1, "list1");

	list1.erase(++list1.begin());
	cout << "list1.erase(++list1.begin()):" << endl;
	put_list(list1, "list1");

	list2.assign(8, 1);
	cout << "list2.assign(8,1):" << endl;
	put_list(list2, "list2");

	cout << "list1.max_size(): " << list1.max_size() << endl;
	cout << "list1.size(): " << list1.size() << endl;
	cout << "list1.empty(): " << list1.empty() << endl;

	put_list(list1, "list1");
	put_list(list3, "list3");
	cout << "list1>list3: " << (list1 > list3) << endl;
	cout << "list1<list3: " << (list1 < list3) << endl;

	list1.sort();
	put_list(list1, "list1");

	list1.splice(++list1.begin(), list3);
	put_list(list1, "list1");
	put_list(list3, "list3");
	Sleep(10000);
}


相關推薦

C++list的使用總結常用list操作

一、List定義: List是stl實現的雙向連結串列,與向量(vectors)相比, 它允許快速的插入和刪除,但是隨機訪問卻比較慢。使用時需要新增標頭檔案 #include <list> 二、List定義和初始化:     list<int>lst

Redis資料型別常用操作命令——LIST操作

可以通過該網站檢視更多redis命令及資訊:http://redisdoc.com/ LPUSH key value [value …] 將一個或多個值 value 插入到列表 key 的表頭 如果有多個 value 值,那麼各個 value 值按從左到右的順序依次插入到表頭: 比如說,對空

mysql時間類型總結常用時間函數

ron 顯示 格式 extract ont 字節 時間表 時間類型 blog 日期時間和類型 常用日期和時間類型 字節 year 1 表示年份

C語言關鍵字運算符操作

oat 分享 限定 改變 truct bce 基本 blog col 1、數據類型與變量的本質 數據類型 :數據類型可以理解為固定內存大小的別名,是創建變量的模子變量本質 :變量是一段實際連續存儲空間的別名,程序中通過變量來申請並命名存儲空間,通過變量的名字可以使用存儲空間

開啟運維之路之第 2 篇——認識Linux常用目錄操作命令

IT界內有3種人最能裝X:①打字速度一把嗦(初級)。②懂電腦配置,如防火牆、聯網、電腦埠、各種終端的使用(中級)。③用命令列搞事情(高階)!請對號入座 ^_^  本屌剛進入初級階段! 本文將要帶你直接進入高階的裝X階段! 認識Linux虛擬機器: Linux系統是一種典型的

必須要會的Git基本使用常用命令操作

之前一直用的svn,後來換了之後才發現git的強大功能,是svn不能比的。缺點就是可能上手比較難一點,剛開始自己研究了兩天才摸索出來一些基本使用方法。 最近做專案需要建庫等等,都用到了git,隨著越來越多的使用,也越來有越多的認識。 一開始都是別人建好遠端庫,克隆下來就行了。 下面

C++面試總結常用基礎知識

轉載自:https://www.jianshu.com/p/e21d99638cf9C++程式設計師面試一般都是以下三板斧1.基礎問答2.然後一頓虛擬函式、虛擬函式表、純虛擬函式、抽象類、解構函式、拷貝建構函式3.運算元過載、STL、智慧指標-------------------分割線------------

C語言基礎指標⑥字元操作

接續上篇C語言基礎及指標⑤動態記憶體分配 字元操作 , 是我們寫程式時 , 最常用的一種操作 , 例如:字串擷取 , 字串替換 , 字串轉整數型別等等 , 都是字元操作 , 在java中String類就是二三十個方法 , 還有StringBuffer , StringBuilder等輔助類 。

【Git入門】安裝常用命令操作

Git VS SVN ① 版本庫本地化,支援離線提交,相對獨立不影響協同開發。每個開發者都擁有自己的版本控制庫,在自己的版本庫上可以任意的執行提交程式碼、建立分支等行為。 ② 更少的“倉庫汙染”。git對於每個工程只會產生一個.git目錄,這個工程所有的版本控制資訊都在這個目錄中,不

Redis資料型別常用操作命令——String操作

可以通過該網站檢視更多redis命令及資訊:http://redisdoc.com/ set k v: 當set k1 v1後再次set k1 v2,則會覆蓋上一次的值; get key: 獲取key的value; del key: 刪除當前key; APPEND key value:

Redis資料型別常用操作命令——key操作

可以通過該網站檢視更多redis命令及資訊:http://redisdoc.com/ key: select:用於選擇redis的DB,redis的DB有0-16個數據庫。 keys /key::遍歷該資料庫中的所有的key,key代表具體的key。 EXISTS key:代表是否存在

Redis資料型別常用操作命令——資料型別

Redis總共有5大資料型別,分列如下: String(字串): string是redis最基本的型別,你可以理解成與Memcached一模一樣的型別,一個key對應一個value。 string型別是二進位制安全的。意思是redis的string可以包含任何資料。比如jpg圖片或者序列化的

Redis資料型別常用操作命令——hash操作

可以通過該網站檢視更多redis命令及資訊:http://redisdoc.com/ HSET key field value 將雜湊表 key 中的域 field 的值設為 value 。 如果 key 不存在,一個新的雜湊表被建立並進行 HSET 操作。 如果域 field 已經存在於雜

Java中foreach用法常用集合操作

foreach語句是java5的新特徵之一,在遍歷陣列、集合方面,foreach為開發人員提供了極大的方便。  foreach語句是for語句的特殊簡化版本,但是foreach語句並不能完全取代for語句,然而,任何的foreach語句都可以改寫為for語句版本。  for

SQL Server知識總結常用命令

1、獲得表或者資料庫的ddl 有的時候想把某個表的ddl匯出,方法如下:選中表,點選右鍵,選擇“Script Table as”-》“Create To”,選中檔案或者剪貼簿,當然還有一些別的選項。 如果想把一個數據庫裡的表都匯出,有一個便利的方法: Right-cli

C語言基礎之常用檔案操作2(附程式碼)

這裡在上一章的基礎上再介紹幾個常用的檔案操作的函式,包括fprintf、fscanf、ftell、fseek等。 檔案操作函式介紹 1、fprintf 函式 函式原型: int fpringf(FILE* stream,const char *forma

Linq常用List操作總結,Foreach、分頁、交併集、去重、SelectMany等

/*  以下圍繞Person類實現,Person類只有Name和Age兩個屬性  一.List<T>排序  1.1 List<T>提供了很多排序方法,sort(),Orde

scala map/list/array/的常用內建遍歷操作總結

Scala 是面向函式的,所以在集合函式裡,它很輕易地提供了非常豐富遍歷操作,陣列變換操作。這對於我們資料探勘,爬蟲,文字處理等都非常有幫助。有了這些內建的遍歷變換操作,我們再也不用像java那樣寫一個笨笨的for迴圈來迭代,然後還要定義一些規範的函式來迎合需求。而sca

python基礎學習二 數據結構之list相關基本操作

意思 指定位置 blog div 基礎 我們 clas 位置 列表 list是py內置的一種數據類型,list就是列表的意思,list就是一種有序的數據集合,可以隨時增加和刪除list的元素。 生活中,比如我們要列出全班同學的名字,就可以用list來表示 >>

[C#]獲取連接MySql數據庫常用的CRUD操作

into 對象 new 常用 final 對數 stat void row 測試如下: 首先添加引用:MySql.Data.dll 鏈接:http://pan.baidu.com/s/1dEQgLpf 密碼:bnyu ①建立mysql數據庫鏈接 1 /