最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

deque容器的概念模型

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

示意圖

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

deque與vector的區(qū)別:

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

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

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

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

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

4.圖示:

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

deque容器的基本操作

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

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

deque容器的構(gòu)造

函數(shù)原型

  • deque<T> deq;其中T是泛型,用來存放數(shù)據(jù)類型,這是默認(rèn)構(gòu)造函數(shù),較為常用
  • deque(deq.begin(),deq.end()); 將[deq.begin(),deq.end)前閉后開的區(qū)間內(nèi)的元素拷貝給本身容器
  • deque(n,elem);構(gòu)造函數(shù)將n個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);
    //測試輸出
    printDeque(d1);
    printDeque(d2);
    printDeque(d3);
    printDeque(d4);
    //排序
    cout << "排序" << endl;
    sort(d1.begin(), d1.end());
    printDeque(d1);
}

tips:如果將打印語句設(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個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);
    //測試:
    printDeque(d2);
    printDeque(d3);
    printDeque(d4);
}

容器大小

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

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

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

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

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

代碼示例:

void testc()
{
	//大小的操作:
	//size:
	deque<int>d;
	if (d.empty())
	{
		cout << "此時容器為空" << 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沒有容量概念
  • 判斷是否為空——empty
  • 返回元素個數(shù)——size
  • 重新指定個數(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個指定元素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ù)存取

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

函數(shù)原型:

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

代碼示例:

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

排序

需要引入頭文件:<algorithm>

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

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

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

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

相關(guān)文章

  • c++顯式類型轉(zhuǎn)換示例詳解

    c++顯式類型轉(zhuǎn)換示例詳解

    這篇文章主要介紹了c++顯式類型轉(zhuǎn)換示例詳解,需要的朋友可以參考下
    2014-04-04
  • C語言的sleep、usleep、nanosleep等休眠函數(shù)的使用

    C語言的sleep、usleep、nanosleep等休眠函數(shù)的使用

    本文主要介紹了C語言的sleep、usleep、nanosleep等休眠函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • C語言函數(shù)指針的老生常談

    C語言函數(shù)指針的老生常談

    這篇文章主要為大家介紹了vue組件通信的幾種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • VSCode C/C++多文件編譯配置小結(jié)

    VSCode C/C++多文件編譯配置小結(jié)

    本文主要介紹了VSCode C/C++多文件編譯配置小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • VisualStudio Community2019在安裝的過程中無法進(jìn)入安裝界面的解決方法

    VisualStudio Community2019在安裝的過程中無法進(jìn)入安裝界面的解決方法

    這篇文章主要介紹了VisualStudio Community2019在安裝的過程中無法進(jìn)入安裝界面的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • C++實現(xiàn)LeetCode(139.拆分詞句)

    C++實現(xiàn)LeetCode(139.拆分詞句)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(139.拆分詞句),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 介紹C語言程序中的注釋等輔助語句如何使用

    介紹C語言程序中的注釋等輔助語句如何使用

    C語言中分為單行注釋和多行注釋:單行注釋?以?//?開始的這一行文本,可能不被編譯器所支持;多行注釋從?/*?到?*/之間的所有文本,不支持嵌套,下面讓我們詳細(xì)來了解
    2022-04-04
  • c++訪問修飾符與繼承關(guān)系詳解

    c++訪問修飾符與繼承關(guān)系詳解

    C++提供了三個修飾符來限定類成員的被訪問權(quán)限,分別是public、protected、private,通過限定訪問權(quán)限,可以達(dá)到程序編寫者想要解決的安全問題和權(quán)限問題,本文給大家介紹c++訪問修飾符與繼承關(guān)系,感興趣的朋友一起看看吧
    2023-10-10
  • 一起來看看C語言的預(yù)處理注意點

    一起來看看C語言的預(yù)處理注意點

    這篇文章主要為大家詳細(xì)介紹了C語言的預(yù)處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C語言實現(xiàn)頁面置換算法

    C語言實現(xiàn)頁面置換算法

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)頁面置換算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12

最新評論

隆子县| 共和县| 克什克腾旗| 海林市| 云林县| 天水市| 平山县| 河间市| 岫岩| 伊金霍洛旗| 湾仔区| 三门峡市| 铁岭县| 张家港市| 萝北县| 巴彦县| 顺昌县| 沧州市| 兴业县| 垣曲县| 苗栗市| 翁牛特旗| 尉犁县| 张家川| 喜德县| 芜湖县| 黑河市| 囊谦县| 彝良县| 寿光市| 奇台县| 永顺县| 兰溪市| 介休市| 资源县| 上虞市| 安西县| 方城县| 黔西| 宜黄县| 阿拉善右旗|