RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

c++值deque容器

嵌入式技術 ? 來源:嵌入式技術 ? 作者:嵌入式技術 ? 2023-07-14 08:49 ? 次閱讀

1.deque容器介紹

deque 是 double-ended queue 的縮寫,又稱雙端隊列容器。deque容器支持從頭部和尾部雙端插入、刪除數(shù)據(jù)。與vector容器不同的是,vector容器是一段連續(xù)的空間,而deque沒有所謂容量的概念,因為它是動態(tài)的以分段連續(xù)空間組合而成,隨時可以增加一段新的空間并連接起來。不會像vector那樣,因為空間不足而擴容,復制元素到新的空間,再釋放舊的空間。因此deque沒有必要提供所謂的擴容(reserve)的功能。

wKgaomSwlVeABkc8AATxtQagCLQ587.png

deque容器可以看做是一個雙端數(shù)組,可以從頭或者尾之間插入數(shù)據(jù)。從頭插入或者刪除使用push_front和pop_front。從尾插入或刪除輸出使用push_backh和pop_back。從任意位置插入可以使用insert函數(shù)。

deque容器,在空間管理上是通過內(nèi)部中控器來實現(xiàn)的。中控器記錄每一個緩沖區(qū)的地址。緩沖區(qū)中存放真實的數(shù)據(jù)內(nèi)容。因而在deque容器中,數(shù)據(jù)空間是由多段空間組成的。

deque容器是沒有預留空間函數(shù)reserve和獲取容量大小函數(shù)capacity。

deque從頭端插入數(shù)據(jù)比vector容器快,而且數(shù)據(jù)量越大越明顯。

wKgZomSwljqAG_uXAARxbhSzBNw535.png

2.deque容器構造函數(shù)

deque容器的構造函數(shù)和vector類似,由無參構造、有參構造、拷貝構造。

deque構造函數(shù):
	deque() --無參構造
	deque(begin,end);//有參構造,將begin~end之間的數(shù)據(jù)拷貝
	deque(int count,elem);//count個elem數(shù)據(jù)
	deque(deque &p);//拷貝構造

應用示例:

#include 
using namespace std;
#include 
#include 
void PrintDeque(const deque& p)
{
	for (deque::const_iterator deq = p.begin(); deq != p.end(); deq++)
	{
		cout  deq;
	//插入數(shù)據(jù):尾插
	deq.push_back(1);
	deq.push_back(2);
	deq.push_back(3);
	//插入數(shù)據(jù):頭插
	deq.push_front(4);
	deq.push_front(5);
	deq.push_front(6);
	cout  deq2(deq.rbegin(), deq.rend());//區(qū)間賦值
	PrintDeque(deq2);
	deque deq3(3, 666);//賦值3個666
	PrintDeque(deq3);
	cout  deq4(deq);//拷貝構造
	PrintDeque(deq4);
}
int main()
{
	test();
	system("pause");
}
wKgaomSwl_uAGNf4AAOosi5FoJY681.png

3.deque容器賦值

賦值方式可以直接使用“=”賦值,也可以通過函數(shù)assign實現(xiàn)。

deq賦值:
	重載"=":operator=();
	assign(begin,end);//區(qū)間賦值
	assign(int count,elem);//count個elem

使用示例:

include 
#include 
using namespace std;

void PrintDeque(const deque& p)
{
	for (deque::const_iterator deq = p.begin(); deq != p.end(); deq++)
	{
		cout  deq;
	//尾插
	deq.push_back(1);
	deq.push_back(2);
	deq.push_back(3);
	//頭插
	deq.push_front(4);
	deq.push_front(5);
	deq.push_front(6);
	cout  deq2 = deq;//之間賦值
	cout  deq3;
	deq3.assign(deq.begin(), deq.end());
	PrintDeque(deq3);

}
int main()
{
	test();
	system("pause");
}

wKgZomSwmHKAQmzVAAPbv3KEPss788.png

4.deque設置和獲取元素個數(shù)

判斷容器是否為空可以使用empty()函數(shù),設置元素個數(shù)可以使用resize()函數(shù),獲取元素個數(shù)使用size()函數(shù)。


deque容器獲取大?。?	判斷容器是否為空:empty()  ---為空返回true
	獲取容器元素個數(shù):size()  
	指定容器大小:resize(int num);
				 resize(int num,elem);//指定大小,超出部分用elem填充
	resize指定大小,若小于則會將超出部分刪除
注意:
	deque容器沒有獲取容量函數(shù)capacity()	

使用示例:

#include 
using namespace std;
#include 
void PrintDeque(deque& p)
{
	for (deque::iterator deq = p.begin(); deq != p.end(); deq++)
	{
		cout  deq;
	deq.push_back("hello");
	deq.push_back("學習");
	deq.push_back("c++");
	deq.push_back("deque容器");
	deq.push_back("使用");
	deq.push_back("示例");
	PrintDeque(deq);
	cout 
wKgaomSwmVaAR6_cAARyN4aZjqI875.png

5.deque元素的插入與刪除

deque容器是雙端性質的,所以可以從頭端或者尾端插入數(shù)據(jù)。相關函數(shù)如下:


deque容器插入與刪除:
	push_back、pop_back  --尾插和尾刪
	push_front、pop_front --頭插和頭刪除
	
	insert(pos,elem); --pos是一個迭代器,在pos位置插入elem,返回新數(shù)據(jù)位置
	insert(pos,n,elem);  ---在pos位置插入n個elem,無返回值
	insert(pos,begin,end); --在pos位置插入begin~endl的數(shù)據(jù),無返回值
	
	clear()  --清空整個deque容器
	erase(begin,end); --刪除begin~end之間的數(shù),返回下一個數(shù)據(jù)位置
	erase(pos)  --刪除指定位置的數(shù)

使用示例:

#include 
using namespace std;
#include 
void PrintDeque(deque& deq)
{
	for (deque::iterator p = deq.begin(); p != deq.end(); p++)
	{
		cout  deq;
	//頭插
	deq.push_front(1);
	deq.push_front(2);
	deq.push_front(3);
	//尾插
	deq.push_back(4);
	deq.push_back(5);
	deq.push_back(6);
	cout  deq2;
	cout 
wKgZomSwmiGAT0foAAWEr2f-erI565.png

6.deque容器數(shù)據(jù)存取

deque可以通過[]讀寫數(shù)據(jù),也可以通過函數(shù)at()來實現(xiàn)。

deque容器數(shù)據(jù)存?。?	重載[]:operator[]()
	at(pos);
	獲取第一個成員:front
	獲取最后一個成員:back
	第一個成員的前一個位置:rend
	最后一個成員的下一個位置:end

使用示例:

#include 
using namespace std;
#include 
#include 
void test()
{
	deque deq;
	deq.push_back("hello");
	deq.push_back("c++");
	deq.push_back("學習");
	deq.push_back("示例");

	cout 
wKgaomSwmsSAbq-wAANnbZfJDjQ353.png

7.排序

可以使用sort函數(shù)對成員進行排序。該函數(shù)的頭文件是algorithm。

排序:sort(iterator begin,iterator end);//默認是升序 

使用示例:

#include 
#include 
#include 
#include 
using namespace std;

void test()
{
	string str = "hello,world";
	sort(str.begin(), str.end());
	cout  deq;
	deq.push_back(0);
	deq.push_back(2);
	deq.push_back(1);
	deq.push_front(4);
	deq.push_front(5);
	deq.push_front(6);
	cout 
wKgaomSwm5OAc2YOAAPtMyHiIW0296.png


審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關注

    關注

    3

    文章

    4327

    瀏覽量

    62567
  • 容器
    +關注

    關注

    0

    文章

    495

    瀏覽量

    22060
  • C++
    C++
    +關注

    關注

    22

    文章

    2108

    瀏覽量

    73617
收藏 人收藏

    評論

    相關推薦

    C++零基礎教程STL容器篇之deque容器,輕松上手C++STL

    編程語言C++語言
    電子學習
    發(fā)布于 :2023年01月14日 11:41:55

    HarmonyOS方舟開發(fā)框架容器類API的介紹與使用

    通過數(shù)組實現(xiàn),包括ArrayList、Vector、List、LinkedList、Deque、Queue、Stack七種。線性容器類API,充分考慮了數(shù)據(jù)訪問的速度,實現(xiàn)了運行時(Runtime)通過
    發(fā)表于 03-07 11:40

    HarmonyOS線性容器特性及使用場景

    線性容器實現(xiàn)能按順序訪問的數(shù)據(jù)結構,其底層主要通過數(shù)組實現(xiàn),包括ArrayList、Vector、List、LinkedList、Deque、Queue、Stack七種。 線性容器,充分考慮了數(shù)據(jù)
    發(fā)表于 09-27 15:10

    詳細剖析C++的的3種容器

    容器是隨著面向對象語言的誕生而提出的,容器類在面向對象語言中特別重要,甚至它被認為是早期面向對象語言的基礎。在現(xiàn)在幾乎所有的面向對象的語言中也都伴隨著一個容器集,在C++ 中,就是標準
    的頭像 發(fā)表于 01-09 12:57 ?4953次閱讀
    詳細剖析<b class='flag-5'>C++</b>的的3種<b class='flag-5'>容器</b>

    C++ vector刪除符合條件元素的編程技巧

    C++ vector中實際刪除元素使用的是容器vecrot中std::vector::erase()方法。 C++ 中std::remove()并不刪除元素,因為容器的size()沒有
    的頭像 發(fā)表于 09-20 10:03 ?5411次閱讀

    C++容器的使用代碼資料總結免費下載

    本文檔的主要內(nèi)容詳細介紹的是C++容器的使用代碼資料總結免費下載。
    發(fā)表于 01-29 10:52 ?3次下載
    <b class='flag-5'>C++</b><b class='flag-5'>容器</b>的使用代碼資料總結免費下載

    CC++是一回事嗎

    C89,C++標準是C++99。 我們來介紹C語言和C++中那些不同的地方。 函數(shù)默認
    的頭像 發(fā)表于 11-13 18:18 ?3282次閱讀

    夜空中最亮的星——deque容器

    一、deque工作原理:deque容器內(nèi)部有個中控器,維護每段緩沖區(qū)中的內(nèi)容,緩沖區(qū)中存放真實數(shù)據(jù);中控器維護的每個緩沖區(qū)的地址,使得使用deque時像一片連續(xù)的內(nèi)存空間,如下圖所示:
    的頭像 發(fā)表于 12-24 14:42 ?397次閱讀

    什么是deque

    雙端隊列(deque)和deque一樣都是STL的容器,deque是雙端數(shù)組,而deque是單端的。跟任意其它類型
    的頭像 發(fā)表于 02-27 15:53 ?1925次閱讀

    C++學習筆記之順序容器

    C++中的順序容器是一種用于存儲和管理元素序列的數(shù)據(jù)結構。它們提供了一組有序的元素,并支持在序列的任意位置插入和刪除元素。C++標準庫中提供了多種順序容器,包括vector、
    的頭像 發(fā)表于 05-11 17:05 ?589次閱讀

    C++入門之通用算法

    C++ 是一種強大的編程語言,它提供了許多通用算法,可以用于各種容器類型。這些算法是通過迭代器來操作容器中的元素,因此它們是通用的,可以用于不同類型的容器。在本篇博客中,我們將詳細介紹
    的頭像 發(fā)表于 05-17 09:40 ?655次閱讀

    ?數(shù)組和C++ std::array詳解

    std::array是C++容器庫提供的一個固定大小數(shù)組的容器。其與內(nèi)置的數(shù)組相比,是一種更安全、更容易使用的數(shù)組類型。
    的頭像 發(fā)表于 07-19 11:02 ?1104次閱讀
    ?數(shù)組和<b class='flag-5'>C++</b> std::array詳解

    C++之父新作帶你勾勒現(xiàn)代C++地圖

    為了幫助大家解決這些痛點問題,讓大家領略現(xiàn)代C++之美,掌握其中的精髓,更好地使用C++,C++之父Bjarne Stroustrup坐不住了,他親自操刀寫就了這本《C++之旅》!
    的頭像 發(fā)表于 10-30 16:35 ?836次閱讀
    <b class='flag-5'>C++</b>之父新作帶你勾勒現(xiàn)代<b class='flag-5'>C++</b>地圖

    OpenHarmony語言基礎類庫【@ohos.util.Deque (線性容器Deque)】

    Deque(double ended queue)根據(jù)循環(huán)隊列的數(shù)據(jù)結構實現(xiàn),符合先進先出以及先進后出的特點,支持兩端的元素插入和移除。Deque會根據(jù)實際需要動態(tài)調(diào)整容量,每次進行兩倍擴容。
    的頭像 發(fā)表于 04-25 21:17 ?205次閱讀
    OpenHarmony語言基礎類庫【@ohos.util.<b class='flag-5'>Deque</b> (線性<b class='flag-5'>容器</b><b class='flag-5'>Deque</b>)】

    鴻蒙語言基礎類庫:ohos.util.Deque 線性容器Deque

    Deque(double ended queue)根據(jù)循環(huán)隊列的數(shù)據(jù)結構實現(xiàn),符合先進先出以及先進后出的特點,支持兩端的元素插入和移除。Deque會根據(jù)實際需要動態(tài)調(diào)整容量,每次進行兩倍擴容。
    的頭像 發(fā)表于 07-10 09:19 ?232次閱讀
    鴻蒙語言基礎類庫:ohos.util.<b class='flag-5'>Deque</b> 線性<b class='flag-5'>容器</b><b class='flag-5'>Deque</b>
    RM新时代网站-首页