/*支持随机操作,同时双向插入和删除, 

 如果插入和删除,并且要求随机存取,最好用deque 

 要求存取的用vector 

 要求插入和删除的用list*/ 

 /*deque:double_end_queue*/ 

 #include<stdio.h> 

 #include<deque> 

 #include<algorithm> 

 using namespace std; 

 int main() 

 { 

int a[4]={0,1,2,3}; 

deque<int>Deque(4,4); 

deque<int>D1(Deque);//复制  deque<int>c1(c2);  

D1.assign(a,a+4); 
 //复制 c1.assign(begin,end);  

D1.assign(4,3); 
 //复制 c1.assign(n,ele);n个ele; 
  

deque<int>D2(a,a+4);// 
 复制  deque<int>c(begin,end);  

deque<int>D3(4,2);//复制  deque<int>c(n,ele);  

deque<int>::iterator pos; 

int i; 

for(i=1;i<=4;i++) 

printf("%d\n",D3[i-1]);// 进行随机存取操作 c[]; 
   

for(pos=D2.begin();pos!=D2.end();pos++) 

printf("%d\n",*pos);// 进行迭代操作  

printf("****\n");  

//声明 deque<int>::iterator pos,pos=c.begin pos=c.end();    

D2.push_front(11);//头部进入插入操作  

D2.push_back(100);//尾部进入插入操作  

for(pos=D2.begin();pos!=D2.end();pos++) 

printf("%d\n",*pos); 

D2.pop_front();//头部进行删除操作  

D2.pop_back();//尾部进行删除操作  

for(pos=D2.begin();pos!=D2.end();pos++) 

printf("%d\n",*pos); 

printf("%d %d\n",D2.front(),D2.back()); 

//头元素与 尾元素 c.front(),c.back() 

//此外还有c.size(),c.empty(),c.clear();  

printf("%d\n",D3.at(2)); 

//c.at()与c[]功能相同  

pos=D2.erase(D2.begin());  

//删除函数c.erase(pos),删除POS指针,返回下一地址 

//同样还有 c.erase(behin,end);删除[begin,end)指针 

//返回下一地址  

printf("%d\n",*pos); 

pos=D2.insert(pos,59); 

printf("%d\n",*pos);  

//插入函数 c.insert(pos, ele)返回新数据地址  

//此外 还有 c.insert(pos,n,ele),c.insert(pos,begin,end);无返回值 

pos=find(D2.begin(),D2.end(),59); 

if(pos==D2.end()) 

   
printf("sssss\n"); 

else 

printf("%d\n",*pos);  

//此外还有交换函数c1.swap(c2) swap(c1,c2);  

return 0; 

 }