深入剖析C++ STL序列式容器deque的实现原理
deque是一种C++ STL中的序列式容器,可以被视为精灵版的vector。与vector不同的是,deque能够在队首和队尾进行O(1)的快速插入和删除操作,因此deque在一些特殊的应用场合中表现出了它非凡的能力。
deque的实现使用了两端开口的缓冲区数组,并且使用一个map数据结构来管理这些缓冲区数组。在deque的底层,每个缓冲区的大小都是固定的,并且相邻两个缓冲区的大小是一样的。
下面是一个简单的deque的实现例子:
template<class T>
class deque{
public:
deque();
void push_back(const T& x);
void push_front(const T& x);
void pop_back();
void pop_front();
size_t size() const;
bool empty() const;
T& operator[](size_t i);
const T& operator[](size_t i) const;
private:
enum {BUFFER_SIZE = 512};
typedef vector<T*> Buffer;
Buffer m_buffers;
size_t m_size;
size_t m_startBuffer