STL顺序容器之deque双端队列

本文详细介绍了deque容器的特点与操作,包括其内部数据结构、与vector容器的区别及如何在两端高效地进行插入与删除操作。提供了使用示例代码,展示了push_front、pop_front、push_back和pop_back等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

deque同vector一样也是顺序容器。它内部拥有更复杂的数据结构,从deque队列的两端插入和删除元素都非常快,在容器中间插入或删除则需要付出的代价非常高。

deque的绝大部分操作与vector一致,如支持各种构造方式,push_back,insert,size,resize,empty,capacity等各种vector所支持的操作。并支持push_front(),pop_front()vector不支持的操作。

deque的一些性质:

1:与vector容器一样,在deque容器的中间insert或erase元素效率比较低。

2:不同于vector容器,deque容器提供高效地在其首部实现insert或erase操作,就像在容器尾一样。

3:与vector容器一样而不同于list容器的是,deque容器支持对所有元素的随机访问。

4:在deque容器首部或尾部插入元素不会使任何迭代器失效,而在首部或尾部删除元素则只会使指向该元素的迭代器失效。在deque容器的任何其他位置的插入与删除操作将使指向该容器元素的所有迭代器失效。

使用示例1:

    #include <iostream>  
    #include <deque>  
    using namespace std;  
    template <typename T>  
    class Print{  
        public:  
        void operator() (T& t){  
        cout << t << " ";     
        }  
    };  
    int main(){  
        deque<int> d;  
        Print<int> print;  
        for(int i = 0; i < 5; ++i)  
         d.push_back(i + 1);  
         //push_front() only apply to list and deque  
         d.push_front(0);  
        //pop_front() only applyy to list and deque  
         cout << "pop_front():" << endl;  
         while(! d.empty()){  
          for_each(d.begin(),d.end(),print);  
          cout << endl;  
          d.pop_front();      
         }  
         //pop_back()  
            for(int i = 0; i < 5; ++i)  
         d.push_back(i + 1);  
         cout << "pop_back():" << endl;  
         while(! d.empty()){  
          for_each(d.begin(),d.end(),print);  
          cout << endl;  
          d.pop_back();   
         }  
    }  


运行结果:

pop_front():
0 1 2 3 4 5
1 2 3 4 5
2 3 4 5
3 4 5
4 5
5
pop_back():
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
其他诸如swap,assign等操作同vector一致,使用示例可以直接参见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值