欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文快速掌握C++雙端數(shù)組容器deque的使用

 更新時(shí)間:2022年07月22日 09:04:32   作者:微涼秋意  
本文和大家分享的是和vector容器功能很像的容器——deque,了解deque容器的本質(zhì),使用方法以及與vector容器的不同之處,感興趣的快跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧

deque容器的概念模型

是雙端數(shù)組,可以對(duì)頭部進(jìn)行插入刪除操作

示意圖

值得注意的是deque容器比vector容器多了頭插、頭刪的操作以及front()和back(),后面這兩個(gè)分別代表容器的第一個(gè)元素和最后一個(gè)元素,并不是迭代器,調(diào)用他們會(huì)得到具體的值。

deque與vector的區(qū)別:

  • vector對(duì)于頭部的插入刪除效率低,數(shù)據(jù)量越大,效率越低
  • deque相對(duì)而言,對(duì)頭部的插入刪除速度會(huì)比vector快
  • vector訪問(wèn)元素時(shí)的速度會(huì)比deque快,這和兩者內(nèi)部實(shí)現(xiàn)有關(guān)

deque的內(nèi)部工作原理:

1.deque內(nèi)部有個(gè)中控器,維護(hù)每段緩沖區(qū)中的內(nèi)容,緩沖區(qū)中存放真實(shí)數(shù)據(jù)。

2.中控器維護(hù)的是每個(gè)緩沖區(qū)的地址,使得使用deque時(shí)像一片連續(xù)的內(nèi)存空間

3.deque的迭代器也是支持隨機(jī)訪問(wèn)的

4.圖示:

deque進(jìn)行插入的時(shí)候是在結(jié)點(diǎn)對(duì)應(yīng)的緩沖區(qū)操作的,緩沖區(qū)不有位置的時(shí)候直接插入到緩沖區(qū)中,緩沖區(qū)滿的話就開(kāi)辟新節(jié)點(diǎn),再進(jìn)行插入,所以才說(shuō)像是連續(xù)的存儲(chǔ)空間。

deque容器的基本操作

包括構(gòu)造方法、賦值、計(jì)算大小、插入刪除等

構(gòu)造函數(shù)

deque容器的構(gòu)造

函數(shù)原型

  • deque<T> deq;其中T是泛型,用來(lái)存放數(shù)據(jù)類型,這是默認(rèn)構(gòu)造函數(shù),較為常用
  • deque(deq.begin(),deq.end()); 將[deq.begin(),deq.end)前閉后開(kāi)的區(qū)間內(nèi)的元素拷貝給本身容器
  • deque(n,elem);構(gòu)造函數(shù)將n個(gè)elem值拷貝給本身容器
  • deque(const deque &ans);拷貝構(gòu)造函數(shù)

代碼示例:

//打印
void printDeque(const deque<int>& d)//只讀容器不可改
{//迭代器變?yōu)?const_iterator
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
void testa()
{
    //構(gòu)造:
    //第一種
    deque<int>d1;
    for (int i = 0; i < 10; i++)
    {
        //d1.push_back(i); 頭插尾插都可以
        d1.push_front(i);
    }
    //第二種
    deque<int>d2(d1.begin(), d1.end());
    //第三種
    deque<int>d3(d2);
    //第四種
    deque<int>d4(6, 100);
    //測(cè)試輸出
    printDeque(d1);
    printDeque(d2);
    printDeque(d3);
    printDeque(d4);
    //排序
    cout << "排序" << endl;
    sort(d1.begin(), d1.end());
    printDeque(d1);
}

tips:如果將打印語(yǔ)句設(shè)為只讀,那么迭代器類型也要變?yōu)椋篶onst_iterator。

賦值操作

給deque容器賦值

函數(shù)原型:

  • deque& operator=(const deque &ans);重載賦值操作符
  • assign(be,en);將[be,en);將[be,en)區(qū)間內(nèi)的數(shù)組拷貝賦值給自己
  • assign(n,elem);將n個(gè)elem拷貝賦值給自己

代碼示例:

void testb()
{
    //賦值:
    deque<int>d1;
    for (int i = 0; i < 10; i++)
    {
        d1.push_back(i);
    }
    //第一種
    deque<int>d2 = d1;
    //第二種
    deque<int>d3;
    d3.assign(d1.begin(), d1.end());
    //第三種
    deque<int>d4;
    d4.assign(6, 88);
    //測(cè)試:
    printDeque(d2);
    printDeque(d3);
    printDeque(d4);
}

容器大小

對(duì)deque的大小進(jìn)行操作

deque.empty();判斷容器是否為空

deque.size();返回容器中元素的個(gè)數(shù)

deque.resize(m);重新指定容器長(zhǎng)度為num,容器變長(zhǎng)以默認(rèn)值填充,容器變短則超出部分刪除

deque.resize(m,elem);同上,區(qū)別是默認(rèn)值填充變?yōu)閑lem值填充

代碼示例:

void testc()
{
	//大小的操作:
	//size:
	deque<int>d;
	if (d.empty())
	{
		cout << "此時(shí)容器為空" << endl;
		cout << "打印容器的大?。? << d.size() << endl;
	}
	for (int i = 0; i < 7; i++)
	{
		d.push_back(i);
	}
	cout << "打印容器的大小:" << d.size() << endl;
	printDeque(d);

	//resize
	d.resize(10,100);
	cout << "打印容器的大?。? << d.size() << endl;
	printDeque(d);
	d.resize(5);
	cout << "打印容器的大?。? << d.size() << endl;
	printDeque(d);
}

tips:

  • deque沒(méi)有容量概念
  • 判斷是否為空——empty
  • 返回元素個(gè)數(shù)——size
  • 重新指定個(gè)數(shù)——resize

插入和刪除

向deque容器中插入和刪除數(shù)據(jù)

函數(shù)原型:

兩端操作:

  • push_back(e);尾插
  • push_front(e);頭插
  • pop_back(); 尾刪
  • pop_front(); 頭刪

指定位置:

  • insert(const_iterator pos,e);迭代器指向位置pos插入指定元素e
  • insert(const_iterator pos,int count ,e); 插入count個(gè)指定元素e
  • insert(const_iterator pos,beg,en);插入指定區(qū)域的元素
  • erase(const_iterator pos);刪除迭代器指向的元素
  • erase(const_iterator begin,const_iterator end);刪除迭代器從begin到end之間的元素
  • clear();清空容器內(nèi)所有元素

代碼示例:

//兩端操作
void test01()
{
	deque<int>d1;
	//尾插
	d1.push_back(10);
	d1.push_back(20);

	//頭插
	d1.push_front(100);
	d1.push_front(200);

	PrintDeque(d1);
	//尾刪
	d1.pop_back();
	PrintDeque(d1);

	//頭刪
	d1.pop_front();
	PrintDeque(d1);
}
void test02()
{
	deque<int>d2;
	//尾插
	d2.push_back(10);
	d2.push_back(20);

	//頭插
	d2.push_front(100);
	d2.push_front(200);

	PrintDeque(d2);

	//insert插入
	d2.insert(d2.begin(), 1000);
	PrintDeque(d2);

	d2.insert(d2.begin(), 2,10000);
	PrintDeque(d2);

	//按照區(qū)間進(jìn)行插入
	deque<int>d3;
	d3.push_back(1);
	d3.push_back(2);
	d3.push_back(3);
	d2.insert(d2.begin(), d3.begin(), d3.end());
	PrintDeque(d2);
}

void test03()
{
	deque<int>d4;
	//尾插
	d4.push_back(10);
	d4.push_back(20);
	//頭插
	d4.push_front(100);
	d4.push_front(200);
	PrintDeque(d4);
	//刪除
	deque<int>::iterator it = d4.begin();
	it++;
	d4.erase(it);
	PrintDeque(d4);
	//按照區(qū)間方式刪除
	d4.erase(d4.begin(), d4.end());
	PrintDeque(d4);
	//清空
	d4.clear();
	PrintDeque(d4);
}

數(shù)據(jù)存取

對(duì)deque中的元素進(jìn)行存取操作

函數(shù)原型:

  • at(int dex);返回索引dex所指的數(shù)據(jù)
  • operator[];同上
  • front();返回容器中第一個(gè)數(shù)據(jù)
  • back();返回容器中最后一個(gè)數(shù)據(jù)

代碼示例:

    //通過(guò)[]方式訪問(wèn)元素
    for (int i = 0; i < d1.size(); i++)
    {
        cout << d1[i] << " ";
    }
    cout << endl;
    //通過(guò)at方式訪問(wèn)元素
    for (int i = 0; i < d1.size(); i++)
    {
        cout << d1.at(i) << " ";
    }

排序

需要引入頭文件:<algorithm>

利用算法實(shí)現(xiàn)對(duì)deque容器的排序

算法:sort(iterator beg,iterator en); 對(duì)beg和en的區(qū)間升序排序

tips:對(duì)于支持隨機(jī)訪問(wèn)的迭代器都可以用sort進(jìn)行排序

到此這篇關(guān)于一文快速掌握C++雙端數(shù)組容器deque的使用的文章就介紹到這了,更多相關(guān)C++雙端數(shù)組容器deque內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言模擬實(shí)現(xiàn)庫(kù)函數(shù)詳解

    C語(yǔ)言模擬實(shí)現(xiàn)庫(kù)函數(shù)詳解

    C語(yǔ)言庫(kù)函數(shù)是把自定義函數(shù)放到庫(kù)里,是別人把一些常用到的函數(shù)編完放到一個(gè)文件里,供程序員使用,下面讓我們一起來(lái)詳細(xì)了解它
    2022-07-07
  • 淺談c語(yǔ)言中類型隱性轉(zhuǎn)換的坑

    淺談c語(yǔ)言中類型隱性轉(zhuǎn)換的坑

    下面小編就為大家?guī)?lái)一篇淺談c語(yǔ)言中類型隱性轉(zhuǎn)換的坑。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • C++回調(diào)函數(shù)的理解和使用教程

    C++回調(diào)函數(shù)的理解和使用教程

    這篇文章主要給大家介紹了關(guān)于C++回調(diào)函數(shù)的理解和使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 一文搞懂C++中的四種強(qiáng)制類型轉(zhuǎn)換

    一文搞懂C++中的四種強(qiáng)制類型轉(zhuǎn)換

    很多朋友向小編了解C語(yǔ)言中怎么進(jìn)行強(qiáng)制類型轉(zhuǎn)換呢?在這小編告訴大家強(qiáng)制類型轉(zhuǎn)換可以分為兩種,一種是隱式類型轉(zhuǎn)換一種是顯示類型轉(zhuǎn)換,下面通過(guò)示例代碼給大家介紹下,需要的朋友參考下吧
    2021-07-07
  • c語(yǔ)言中malloc、realloc與calloc 的區(qū)別以及聯(lián)系

    c語(yǔ)言中malloc、realloc與calloc 的區(qū)別以及聯(lián)系

    以下是對(duì)c語(yǔ)言中的malloc函數(shù),realloc函數(shù)與calloc函數(shù)的區(qū)別以及它們之間的聯(lián)系進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-08-08
  • 用C# 控制Windows系統(tǒng)音量的實(shí)現(xiàn)方法

    用C# 控制Windows系統(tǒng)音量的實(shí)現(xiàn)方法

    本篇文章是對(duì)使用C#控制Windows系統(tǒng)音量的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中map和set的使用及示例

    C++中map和set的使用及示例

    map和set是STL容器中的部分,本文主要介紹了C++中map和set的使用小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • C++中const的用法詳細(xì)總結(jié)

    C++中const的用法詳細(xì)總結(jié)

    以下是對(duì)C++中const的用法進(jìn)行了詳細(xì)的總結(jié)分析,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-09-09
  • C++里最容易忽視卻不能忽視的問(wèn)題(必看)

    C++里最容易忽視卻不能忽視的問(wèn)題(必看)

    在C++里最容易忽視卻不能忽視的問(wèn)題都有哪些呢?下面小編就為大家介紹一下。一起跟隨小編過(guò)來(lái)看看吧
    2016-05-05
  • Qt實(shí)現(xiàn)模糊匹配功能的實(shí)例詳解

    Qt實(shí)現(xiàn)模糊匹配功能的實(shí)例詳解

    對(duì)于瀏覽器的使用,我想大家一定不會(huì)陌生吧,輸入要搜索的內(nèi)容時(shí),會(huì)出現(xiàn)相應(yīng)的匹配信息。本文就來(lái)用Qt實(shí)現(xiàn)模糊匹配功能,感興趣的可以了解一下
    2022-10-10

最新評(píng)論