您的位置:首页 > 产品设计 > UI/UE

STL之Deque的使用方法

2014-08-28 14:20 232 查看
/*deque: 是一个double-ended queue,

1)支持随即存取,也就是[]操作符,

2)支持两端操作,push(pop)-back(front),在两端操作上与list效率差不多

因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面的原则:

1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector

2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list

3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。

*/




#include <iostream>


#include <deque>


using namespace std;




void printDeque(deque<int> d)

{

//使用下标

//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()

{

//创建deque

deque<int> d1; //创建一个没有任何元素的deque对象

deque<int> d2(10);//创建一个具有10个元素的deque对象,每个元素值为默认

deque<double> d3(10, 5.5); //伊妹一个具有10个元素的deque对象,每个元素的初始值为5.5

deque<double> d4(d3); //通过拷贝一个deque对象的元素值, 创建一个新的deque对象

int iArray[] = {11, 13, 19, 23, 27};

deque<int> d5(iArray, iArray+5);//将迭代器区间[first, last)所指的元素拷贝到一个新创建的deque对象中

//初始化赋值:同vector一样,使用尾部插入函数push_back()

for (int i = 1; i < 6 ; i++)

d1.push_back(i*10);

//遍历元素: 1-下标方式 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; //支持随机存取(即[]操作符),所以begin()可以+3

d1.insert(d1.begin()+2,200);

printDeque(d1);

//元素删除 尾部删除用pop_back();头部删除用pop_front();

//任意迭代位置或迭代区间上的元素删除用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个元素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++) //恢复

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)

}

转帖自:http://www.cppblog.com/huyutian/articles/107459.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: