哪个STL容器可以双向增长?

时间:2019-05-14 08:01:38

标签: c++ stl containers

给一个迭代器作为开始,然后是结束,在STL中是否有一个容器,可以让我动态地同时从两端填充数据,而不必事先分配最大大小?根据我的理解,我可以使用诸如vector或string之类的模板,可以使用诸如push_back()方法在向前方向上动态增长。或者,我可以使用具有预定大小的类似数组的模板,该模板可以同时在正反两个方向上访问以填充数据。

我正在寻找的是一个模板,该模板将使我能够灵活地适应动态增长的容器(如矢量),同时允许从两端(如数组)进行数据填充。在数组的情况下,开始和结束迭代器之间存在预定间隙(由于固定大小);在动态容器模板的情况下,当我从任一端同时填充数据时,我希望这个差距会动态增长。

欣赏您的想法。

谢谢

Vinod

1 个答案:

答案 0 :(得分:6)

这听起来完全是为std::deque(双头队列)创建的:

  

引用cppreference.com

     

std :: deque(双端队列)是一个索引序列容器,它允许在其开始和结束时快速插入和删除。此外,在双端队列的任一端插入和删除都不会使指向其余元素的指针或引用无效。

其界面类似于std::vector,但有效地允许在正面和背面进行添加:

std::deque<int> dq;

dq.push_back(5);
dq.push_front(9);

std::cout << dq[0] << '\n';
std::cout << dq[1] << '\n';

输出:

9
5