STL之Deque的使用方法
生活随笔
收集整理的這篇文章主要介紹了
STL之Deque的使用方法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
/*deque:?是一個(gè)double-ended?queue,
? ? 1)支持隨即存取,也就是[]操作符,
? ? 2)支持兩端操作,push(pop)-back(front),在兩端操作上與list效率差不多
? ? 因此在實(shí)際使用時(shí),如何選擇這三個(gè)容器中哪一個(gè),應(yīng)根據(jù)你的需要而定,一般應(yīng)遵循下面的原則:?
? ? 1、如果你需要高效的隨即存取,而不在乎插入和刪除的效率,使用vector?
? ? 2、如果你需要大量的插入和刪除,而不關(guān)心隨即存取,則應(yīng)使用list?
? ? 3、如果你需要隨即存取,而且關(guān)心兩端數(shù)據(jù)的插入和刪除,則應(yīng)使用deque。
*/
#include?<iostream>
#include?<deque>
using?namespace?std;
void?printDeque(deque<int>?d)
{
//使用下標(biāo)
//for?(unsigned?int?i?=?0;?i?<?d.size();?i++)
//{
//?cout<<"d["<<i<<"]?=?"<<d[i]<<",?";
//}
//使用迭代器
//deque<int>::iterator?iter?=?d.begin();
//for?(;iter?!=?d.end();?iter?++)
//{
//?cout<<"d["<<iter-d.begin()<<"]?=?"<<(*iter)<<",?";
//}
//使用迭代器指針
deque<int>::iterator?*pIter?=?new?deque<int>::iterator;
if?(?NULL?==?pIter?)
{
? ?return?;
}
for?(*pIter?=?d.begin();?*pIter?!=?d.end();?(*pIter)++)
{
? ?cout<<"d["<<*pIter?-?d.begin()?<<"]="<<**pIter<<",?";
}
if?(NULL?!=?pIter)
{
? ?delete?pIter;
? ?pIter?=?NULL;
}
cout<<endl;
}
void?main()
{
//創(chuàng)建deque
deque<int>?d1;?//創(chuàng)建一個(gè)沒有任何元素的deque對(duì)象
deque<int>?d2(10);//創(chuàng)建一個(gè)具有10個(gè)元素的deque對(duì)象,每個(gè)元素值為默認(rèn)
deque<double>?d3(10,?5.5);?//伊妹一個(gè)具有10個(gè)元素的deque對(duì)象,每個(gè)元素的初始值為5.5
deque<double>?d4(d3);?//通過拷貝一個(gè)deque對(duì)象的元素值,?創(chuàng)建一個(gè)新的deque對(duì)象
int?iArray[]?=?{11,?13,?19,?23,?27};
deque<int>?d5(iArray,?iArray+5);//將迭代器區(qū)間[first,?last)所指的元素拷貝到一個(gè)新創(chuàng)建的deque對(duì)象中
//初始化賦值:同vector一樣,使用尾部插入函數(shù)push_back()
for?(int?i?=?1;?i?<?6?;?i++)
? ?d1.push_back(i*10);
//遍歷元素:?1-下標(biāo)方式?2-迭代器方式?反向遍歷(略)
cout<<"printDeque(d1)?:?"<<endl;
printDeque(d1);
//元素插入:尾部插入用push_back(),頭部插入用push_front(),其它位置插入用insert(&pos,?elem)
cout<<"d1.push_front(100):?"<<endl;
d1.push_front(100);
printDeque(d1);
cout<<"d1.insert(d1.begin()+3,?200):?"<<endl;?//支持隨機(jī)存取(即[]操作符),所以begin()可以+3
d1.insert(d1.begin()+2,200);
//任意迭代位置或迭代區(qū)間上的元素刪除用erase(&pos)/erase(&first,?&last);刪除所有元素用clear();
cout<<"d1.pop_front():?"<<endl;
d1.pop_front();
printDeque(d1);
cout<<"d1.erase(d1.begin()+1):?"<<endl;
d1.erase(d1.begin()+1);?//刪除第2個(gè)元素d1[1]
printDeque(d1);
cout<<"d1.erase(d1.begin(),?d1.begin()?+?2)?=?"<<endl;
d1.erase(d1.begin(),?d1.begin()?+?2);
printDeque(d1);
cout<<"d1.clear()?:"<<endl;
d1.clear();
printDeque(d1);
//其它常用
cout<<"其它常用用法:?"<<endl;
int?flag?=?0;
while(flag?<?2)
{
? ?if?(0?==?flag?)
? ?{
? ??for?(int?i?=?1;?i?<?6?;?i++)?//恢復(fù)
? ? ?d1.push_back(i*10);
? ?}
? ?else
? ?{
? ? d1.clear();
? ? cout<<"after?d1.clear()?,?d1.front(),?d1.back()?is?abnormal!?other?info.:"<<endl;
? ?}
? ?cout<<"d1.empty()?=?"<<d1.empty()<<endl;
? ?cout<<"d1.size()?=?"<<d1.size()<<endl;
? ?cout<<"d1.max_size()?=?"<<hex<<d1.max_size()<<endl;
? ?if?(!d1.empty())
? ?{
? ? cout<<"d1.front()?=?"<<d1.front()<<endl;
? ? cout<<"d1.back()?=?"<<d1.back()<<endl;
? ?}
??
? ?flag++;
??
}
//交換
cout<<"d1.swap(d5)=?"<<endl;
d1.swap(d5);
cout<<"d1?=?";
printDeque(d1);
cout<<"d5?=?";
printDeque(d5);
//printDeque(d)
? ? 1)支持隨即存取,也就是[]操作符,
? ? 2)支持兩端操作,push(pop)-back(front),在兩端操作上與list效率差不多
? ? 因此在實(shí)際使用時(shí),如何選擇這三個(gè)容器中哪一個(gè),應(yīng)根據(jù)你的需要而定,一般應(yīng)遵循下面的原則:?
? ? 1、如果你需要高效的隨即存取,而不在乎插入和刪除的效率,使用vector?
? ? 2、如果你需要大量的插入和刪除,而不關(guān)心隨即存取,則應(yīng)使用list?
? ? 3、如果你需要隨即存取,而且關(guān)心兩端數(shù)據(jù)的插入和刪除,則應(yīng)使用deque。
*/
#include?<iostream>
#include?<deque>
using?namespace?std;
void?printDeque(deque<int>?d)
{
//使用下標(biāo)
//for?(unsigned?int?i?=?0;?i?<?d.size();?i++)
//{
//?cout<<"d["<<i<<"]?=?"<<d[i]<<",?";
//}
//使用迭代器
//deque<int>::iterator?iter?=?d.begin();
//for?(;iter?!=?d.end();?iter?++)
//{
//?cout<<"d["<<iter-d.begin()<<"]?=?"<<(*iter)<<",?";
//}
//使用迭代器指針
deque<int>::iterator?*pIter?=?new?deque<int>::iterator;
if?(?NULL?==?pIter?)
{
? ?return?;
}
for?(*pIter?=?d.begin();?*pIter?!=?d.end();?(*pIter)++)
{
? ?cout<<"d["<<*pIter?-?d.begin()?<<"]="<<**pIter<<",?";
}
if?(NULL?!=?pIter)
{
? ?delete?pIter;
? ?pIter?=?NULL;
}
cout<<endl;
}
void?main()
{
//創(chuàng)建deque
deque<int>?d1;?//創(chuàng)建一個(gè)沒有任何元素的deque對(duì)象
deque<int>?d2(10);//創(chuàng)建一個(gè)具有10個(gè)元素的deque對(duì)象,每個(gè)元素值為默認(rèn)
deque<double>?d3(10,?5.5);?//伊妹一個(gè)具有10個(gè)元素的deque對(duì)象,每個(gè)元素的初始值為5.5
deque<double>?d4(d3);?//通過拷貝一個(gè)deque對(duì)象的元素值,?創(chuàng)建一個(gè)新的deque對(duì)象
int?iArray[]?=?{11,?13,?19,?23,?27};
deque<int>?d5(iArray,?iArray+5);//將迭代器區(qū)間[first,?last)所指的元素拷貝到一個(gè)新創(chuàng)建的deque對(duì)象中
//初始化賦值:同vector一樣,使用尾部插入函數(shù)push_back()
for?(int?i?=?1;?i?<?6?;?i++)
? ?d1.push_back(i*10);
//遍歷元素:?1-下標(biāo)方式?2-迭代器方式?反向遍歷(略)
cout<<"printDeque(d1)?:?"<<endl;
printDeque(d1);
//元素插入:尾部插入用push_back(),頭部插入用push_front(),其它位置插入用insert(&pos,?elem)
cout<<"d1.push_front(100):?"<<endl;
d1.push_front(100);
printDeque(d1);
cout<<"d1.insert(d1.begin()+3,?200):?"<<endl;?//支持隨機(jī)存取(即[]操作符),所以begin()可以+3
d1.insert(d1.begin()+2,200);
printDeque(d1);
?
//元素刪除?尾部刪除用pop_back();頭部刪除用pop_front();?//任意迭代位置或迭代區(qū)間上的元素刪除用erase(&pos)/erase(&first,?&last);刪除所有元素用clear();
cout<<"d1.pop_front():?"<<endl;
d1.pop_front();
printDeque(d1);
cout<<"d1.erase(d1.begin()+1):?"<<endl;
d1.erase(d1.begin()+1);?//刪除第2個(gè)元素d1[1]
printDeque(d1);
cout<<"d1.erase(d1.begin(),?d1.begin()?+?2)?=?"<<endl;
d1.erase(d1.begin(),?d1.begin()?+?2);
printDeque(d1);
cout<<"d1.clear()?:"<<endl;
d1.clear();
printDeque(d1);
//其它常用
cout<<"其它常用用法:?"<<endl;
int?flag?=?0;
while(flag?<?2)
{
? ?if?(0?==?flag?)
? ?{
? ??for?(int?i?=?1;?i?<?6?;?i++)?//恢復(fù)
? ? ?d1.push_back(i*10);
? ?}
? ?else
? ?{
? ? d1.clear();
? ? cout<<"after?d1.clear()?,?d1.front(),?d1.back()?is?abnormal!?other?info.:"<<endl;
? ?}
? ?cout<<"d1.empty()?=?"<<d1.empty()<<endl;
? ?cout<<"d1.size()?=?"<<d1.size()<<endl;
? ?cout<<"d1.max_size()?=?"<<hex<<d1.max_size()<<endl;
? ?if?(!d1.empty())
? ?{
? ? cout<<"d1.front()?=?"<<d1.front()<<endl;
? ? cout<<"d1.back()?=?"<<d1.back()<<endl;
? ?}
??
? ?flag++;
??
}
//交換
cout<<"d1.swap(d5)=?"<<endl;
d1.swap(d5);
cout<<"d1?=?";
printDeque(d1);
cout<<"d5?=?";
printDeque(d5);
//printDeque(d)
}
?
?轉(zhuǎn)帖自:http://www.cppblog.com/huyutian/articles/107459.html
轉(zhuǎn)載于:https://www.cnblogs.com/g0feng/archive/2012/05/15/2502303.html
總結(jié)
以上是生活随笔為你收集整理的STL之Deque的使用方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 总结这阵子的FPGA工作
- 下一篇: 军工央企和军队都是