日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

STL之deque详解

發(fā)布時間:2024/6/21 综合教程 35 生活家
生活随笔 收集整理的這篇文章主要介紹了 STL之deque详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Deuqe概念

容器deque和vector非常相似,屬于序列式容器。都是采用動態(tài)數(shù)組來管理元素,提供隨機(jī)存取,并且有著和vector一樣的接口。不同的是deque具有首尾兩端進(jìn)行快速插入、刪除的能力。

Deque結(jié)構(gòu)

如圖1是deque的邏輯結(jié)構(gòu),從表面上看,deque具有連續(xù)性的存儲空間,并支持隨機(jī)存取功能。實際上deque并不是我們所看到的樣子,其內(nèi)部結(jié)構(gòu),如圖2所示。
deque在實現(xiàn)上主要有以下兩點:

1.由一段一段的定量連續(xù)空間構(gòu)成,第一個區(qū)塊朝某個方向擴(kuò)展,最后一個區(qū)塊朝相反方向擴(kuò)展;
2.管理這些分段的定量連續(xù)空間,維護(hù)其整體連續(xù)的假象,并提供隨機(jī)存取的接口;


圖 1 deque的邏輯結(jié)構(gòu)


圖 2 deque的內(nèi)部結(jié)構(gòu)

Deque的能力

與vector相比,deque功能上的不同之處在于:

首尾兩端都能快速的安插、刪除元素,因此需要在兩端安插、刪除元素時,最好采用deque。存在元素時,deque的內(nèi)部結(jié)構(gòu)會多一個間接過程,操作元素的效率會比vector低一些。迭代器需要在不同區(qū)塊間跳轉(zhuǎn),所以必須是特殊的智能指針,非一般指針。deque不支持對容量和內(nèi)存重分配時機(jī)的控制,除了首尾兩端安插、刪除元素外,其他地方安插、刪除元素都將導(dǎo)致元素的pointer、reference、iterator失效。不過,deque的內(nèi)存重分配機(jī)制優(yōu)于vector,因為deque不必在內(nèi)存重分配時復(fù)制所有的元素。deque的內(nèi)存區(qū)塊不再被使用時,會被釋放。

deque的操作函數(shù):

Deque的操作函數(shù)和vector操作函數(shù)基本一模一樣,操作函數(shù)列表見STL之vector函數(shù)詳解
duque的各項操作只有以下幾點和vector不同:

deque不提供容量操作( capacity()、reserve() )deque提供push_front()、pop_front()函數(shù)直接操作頭部

Deque的特點:

從deque的內(nèi)部結(jié)構(gòu)可知,deque元素是分布在一段段連續(xù)空間上,因此deque具有如下特點:

1、支持隨機(jī)訪問,即支持[]以及at(),但是性能沒有vector好。

2、可以在內(nèi)部進(jìn)行插入和刪除操作,但性能不及l(fā)ist。

由于deque在性能上并不是最高效的,有時候?qū)eque元素進(jìn)行排序,更高效的做法是,將deque的元素移到到vector再進(jìn)行排序,然后在移到回來。

舉例

我們操作deque時,不需要關(guān)心其內(nèi)部結(jié)構(gòu)的實現(xiàn),我們按照deque的邏輯結(jié)構(gòu)進(jìn)行操作,可以認(rèn)為deque是動態(tài)的一維數(shù)組,可在首尾進(jìn)行插入、刪除操作,下標(biāo)從0開始。

#include "stdafx.h"
#include <deque>
#include <string>
#include <iostream>
#include <algorithm>

using namespace std;

void DequeExample()
{
	deque<string> strDeq;//空隊列
	strDeq.assign(3, string("string"));//賦值

	//打印deque的內(nèi)容
	for (unsigned i = 0; i < strDeq.size(); i++)
	{
		cout << "strDeq[" << i << "] :"  << strDeq[i] << endl;
	}
	
	cout << "push_front and push_back elem to deque" << endl;
	
	//首尾插入元素
	strDeq.push_front("first string");
	strDeq.push_back("last string");

	//打印deque的內(nèi)容
	for (unsigned i = 0; i < strDeq.size(); i++)
	{
		cout << "strDeq[" << i << "] :" << strDeq[i] << endl;
	}

	cout << "pop_front and pop_back elem from deque" << endl;
	
	//首尾彈出元素
	strDeq.pop_front();
	strDeq.pop_back();

	//打印deque的內(nèi)容
	for (unsigned i = 0; i < strDeq.size(); i++)
	{
		cout << "strDeq[" << i << "] :"  << strDeq[i] << endl;
	}
}

運行結(jié)果



參考文章:
1.http://blog.csdn.net/xiajun07061225/article/details/7442816

2.http://blog.csdn.net/hackbuteer1/article/details/7729451

總結(jié)

以上是生活随笔為你收集整理的STL之deque详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。