1. 程式人生 > >C++STL隨手筆記(二)List容器的splice及std::partition用法

C++STL隨手筆記(二)List容器的splice及std::partition用法

list容器內建splice這個函式,可以將容器依指定範圍切割,

以及std的partition可以對容器中的元素進行條件篩選並排續,

稱著記憶猶新趕快記錄下來用法。

#include <list>
#include <iostream>
#include <algorithm>
#include <random>
#include <string>
using namespace std;



class data
{
	public:
		data(int n):m_data(n){};
		virtual ~data(){};
		int m_data;
}//宣告要儲存的資料類;


int main(int argc,char **argv)
{

//隨機引擎
	std::random_device RD;
	auto seed=RD();
	std::mt19937	EN;
	std::uniform_int_distribution<int> di(1,100);

	

	list<data> DataList;
//初始化每個元素
	for(int i=1;i!=11;i++)
	{
		data a(di(EN));
		DataList.push_back(a);
	}
//建立一個空白的list
	std::list<data> empty;
//使用splice來將原有在datalist中的元素轉移過去
//splice使用方式
//list.splice(引數1,引數2,引數3,引數4);
//引數一:位置
//在新容器中x的元素插入的位置(迭代器)。
//
//引數二:相同型別的列表物件(如本例當有相同元素data的list)(容器)。
//
//引數三、引數四:
//原容器中被剪接下來的範圍(迭代器)
	empty.splice(empty.begin(),
			DataList,
			DataList.begin(),
			DataList.end());//將原有容器所有元素移到新容器,Datalist變為空
//利用lambda函式來將新容器的值列印
	for_each(empty.begin(),empty.end(),
			[](const data d){
				cout<<d.m_data<<endl;		
			}
			);
	
	
	cout<< "par is"<<partition_val.m_data<<endl<<endl;

	//使用partition函式進行排列
	std::partition(empty.begin(),empty.end(),
			[&](data const& d){
				return d.m_data%2==1;//假如元素是基數則往前排列
			}
			);


	cout<<string(50,'=')<<endl;

//列印經過partition函式之後的值
	for(auto a:empty)
	{
		cout<<a.m_data<<endl;
	}
	return 0;
}


相關推薦

C++STL隨手筆記()List容器splicestd::partition用法

list容器內建splice這個函式,可以將容器依指定範圍切割, 以及std的partition可以對容器中的元素進行條件篩選並排續, 稱著記憶猶新趕快記錄下來用法。 #include <lis

C++ STL學習筆記list雙向連結串列容器

/* * ******************************************** *   list雙向連結串列容器的基礎說明: ******************************************** * * list雙向連結串列容器採用雙向

C++|STL學習筆記-對STL中關聯容器map的進一步認識

關聯容器map key + value 的值 關聯容器 = 有序容器(紅黑樹) + 無序容器(散列表) + hash_map 有序容器中: map的鍵值是不允許重複的 multimap的鍵值是允許重複的 set是一個集合,鍵值=實值,就是隻包含一個值,既是鍵值也是實值,不允許重複 mul

c++ list 容器splice函式

list 的splice函式主要是用來合併兩個list。 splice是list中特有的拼接方法。splice實現了不需要拷貝的list合併,即可以在常數時間內從list的一個區域拼接到另一個list的一個區域。也就是說splice是一個常數時間的函式(但是也

c#第一篇筆記---關於list

reac lis ins eat for each range 刪除 index -> List<T> 線性集合,長度可變的數組 -> 增 Add() AddRange() Insert() 添加一個元素list.Add("張三");

C++STL簡陋筆記

ppp bob rdl baidu strings 層次 arc l2l tin PAT1132CutInteger(20) HDU6208TheDominatorofStrings(AC自動機) 從語言層次的角度看為什麽要精通C語言 glClearColor第四個參數有什

SGISTL原始碼閱讀十 list容器

SGISTL原始碼閱讀十二 list容器中 前言 在list容器上中我們介紹了list的資料結構,構造,空間分配等。接下來我們繼續分析list的一些相關操作。 深入原始碼 begin()/end //返回頭節點 iterator begin() { return (lin

C++|STL學習筆記-map的基本操作(插入,刪除,遍歷,大到小輸出)【仿大佬寫法】

首先的程式碼是插入,刪除,遍歷 執行截圖如下: 原始碼如下: #include <map> #include <iostream> #include <algorithm> using namespace std; typedef pair

C++ primer 讀書筆記 9.2 容器庫概覽

模板類 list<int> deque<double> 也可以定義容器的容器, vector<string> vector<vector<string>> 迭代器 迭代器範圍 [begin, end)

C++STL入門筆記

C++ STL中最基本以及最常用的類或容器無非就是以下幾個: string vector set list map 首先看看我們C語言一般怎麼使用字串的 char* s1 = "Hello SYSU!"; //建立指標指向字串常量,這段字串我們是不能修改

C++STL學習——stack與queue容器

stack容器 簡介 stack是一種堆疊容器,是一種"先進後出"的容器。 stack是簡單地裝飾deque容器而成為另外的一種容器 標頭檔案#include<stack> stack物件的預設構造 stack採用模板類實現, stack

C++|STL學習筆記-map的屬性(大小以及是否存在)

目錄 1.size()的用法 map的property map屬性 1.沒有容量; 2.得到元素的個數size() 這裡給出呼叫他size()的例子,原始碼如下: /*****

C++STL裡面7個常用容器的比較

1.STL容器分類: STL的容器可以分為以下幾個大類:  一 順序(序列)容器, 有vector, list, deque, string,stack( 介面卡類), queue( 介面卡類), priority queues( 介面卡類) 二   關聯容器,     有set, multiset,

STL學習筆記——序列式容器(一級容器

序列式容器(線性結構,儲存了元素操作時的邏輯順序)     array//C++內建    vector       heap//以演算法形式呈現(***_heap)         priority_queue    list    slist    deque      stack//介面卡      q

STL學習筆記——關聯式容器(二級容器

1.RB-tree(二叉平衡搜尋樹,有自動排序功能)2.set     1)所有的元素都會根據元素的鍵值自動被排序(預設升序),set元素的鍵值就是實值,set不允許兩個元素有相同的鍵值;     2)set的迭代器為只讀迭代器,set不允許通過迭代器修改元素值,鍵值無法被修改;     3)由於set底層由

C/C++程式設計學習筆記C語言的函式中,如何使用指標交換兩個數的值,深入理解指標

 使用外部函式交換兩個變數的值,一個再簡單不過的事情,但是在C/C++中,正確實現該功能反應了你對指標和引用等重要知識的掌握程度。本文列舉了幾種常見的寫法,其中前三種是錯誤的,後兩種是正確的。第四種使

c++ STL 學習筆記(map )

關於map 在STL的標頭檔案中<map>中定義了模版類map和multimap,用有序二叉樹表儲存型別為 pair<const Key, T>的元素對序列。序列中的元素以const Key部分作為標識,map中所有元素的Key 值必須是唯一的,multimap則

c++ STL 學習筆記(pair 和 set)

STL pair (1)pair 的定義 標頭檔案 <utility> STL的標頭檔案中描述了一個看上去非常簡單的模版類pair,用來表示一個二元組或元素對,並提供了按照字典序對元素對進行大小比較運算子模版函式。 定義一個pair物件表示一個平面座標點: 例:

《API Design for C++》讀書筆記():API特徵

目錄 本章所講的內容都是在回答下面這個問題:優質的API應該具有哪些基本特徵? 1、問題域建模 編寫API的目的是解決特定的問題或是完成具體的任務。因此,API應該首先為問題提供一個清晰的解決方案,同時能對實際的問題域進行準確的建模。

C++STL之multiset多重集合容器

中序 插入元素 stream 程序說明 紅黑樹 插入 數據 iostream 多重 multiset多重集合容器 multiset與set一樣, 也是使用紅黑樹來組織元素數據的, 唯一不同的是, multiset允許重復的元素鍵值插入, 而set則不允許. multis