»
(13)C++14 deque
(18)C++14 智能指针及引用计数*
(19)C++14 多线程pthread*
(20)C++14 同步锁mutex*
(24)C++中的计时与等待*
(25)C++中的高精度计算*
(27)C++14 std::string*
(31)C++高级技能*
deque,双向队列。在C++中,双向队列是一种数组拼接成的队列,一种双向读写的队列。它由多个固定大小的连续内存块构成。它的优势在于可以按下标随机访问,而又可以快速在队首和队尾插入和删除。
deque的连续内存块的大小由元素的存储空间大小决定。当deque中的一个元素只有1byte的时候,连续内存块为16个元素;当有2bytes时,连续内存块为8个元素;当有3或4bytes时,连续内存块为4个元素;当有5或6或7或8个bytes的时候,连续内存块为2个元素;大于8个bytes时,连续内存块始终只有1个元素。
deque相对list的优势在于能够随机访问元素。也就是,deque对象中记录了下标和内存空间的关系。但,deque不允许做sort排序操作,而list可以做sort排序操作。
下面是deque的使用的一个例子:
#include <iostream>
#include <deque>
using namespace std;
typedef struct ItemStruct{
int resourceId;
uint8_t resourceType;
string resourceName;
}Item;
int main(){
deque<Item>deque_pipe;
Item disk1{1,1,"disk1"};
deque_pipe.push_back(disk1);
Item keyboard1{2,2,"keyboard1"};
deque_pipe.push_back(keyboard1);
Item disk2{3,1,"disk2"};
deque_pipe.push_back(disk2);
cout<<"original items:"<<endl;
for(auto&i:deque_pipe){
cout<<(int)i.resourceType<<"\t\t"<<i.resourceName<<"\t\t"<<i.resourceId<<endl;
}
cout<<endl;
Item resultGotByPos=deque_pipe.at(2);
cout<<"got item2:"<<endl;
cout<<"Type\t\t"<<"Name\t\t"<<"Id"<<endl;
cout<<(int)resultGotByPos.resourceType<<"\t\t"<<resultGotByPos.resourceName<<"\t\t"<<resultGotByPos.resourceId<<endl;
cout<<endl;
cout<<"removed item3:"<<endl;
deque_pipe.erase(deque_pipe.begin()+2);
cout<<"Type\t\t"<<"Name\t\t"<<"Id"<<endl;
for(auto&i:deque_pipe){
cout<<(int)i.resourceType<<"\t\t"<<i.resourceName<<"\t\t"<<i.resourceId<<endl;
}
}
打印结果:
original items:
1 disk1 1
2 keyboard1 2
1 disk2 3
got item2:
Type Name Id
1 disk2 3
removed item3:
Type Name Id
1 disk1 1
2 keyboard1 2