»
(13) C++14 deque
(18) C++14 smart pointer and reference counter*
(19) C++14 pthread*
(20) C++14 synchronized locker--mutex*
(24) C++ time and sleep*
(25) C++ High Precision Computation*
(27) C++14 std::string*
(31) Advanced Level C++ Tech*
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