1)支持隨即存取,也就是[]操作符,
2)支持兩端操作,push(pop)-back(front),在兩端操作上與list效率差不多
因此在實際使用時,如何選擇這三個容器中哪一個,應根據你的需要而定,一般應遵循下面的原則:
1、如果你需要高效的隨即存取,而不在乎插入和刪除的效率,使用vector
2、如果你需要大量的插入和刪除,而不關心隨即存取,則應使用list
3、如果你需要隨即存取,而且關心兩端數據的插入和刪除,則應使用deque。
*/






{
//使用下標
//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;
}


{
//創建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