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

Which STL container could grow in both directions?

提问人:Vinod 提问时间:5/14/2019 更新时间:5/14/2019 访问量:259

问:

给定一个迭代器到开头,一个迭代器经过结尾,STL 中是否有一个容器可以允许我从两端动态同时填充数据,而不必事先分配最大大小?根据我的理解,我可以使用像向量或字符串这样的模板,可以使用 push_back() 方法在正向动态增长。或者,我可以使用具有预定大小的模板,例如数组,可以同时在正向和反向方向上访问以填充数据。

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

欣赏你的想法。

谢谢

维诺德

C++ STL 容器

评论

0赞 Александр Кушниренко 5/14/2019
deque 容器。
0赞 Sumeet 5/14/2019
你试过deque吗?

答:

6赞 Galik 5/14/2019 #1

这听起来正是 std::d eque(双端队列)的创建目的:

引用 cppreference.com

std::d eque(双端队列)是一个索引序列容器,允许在其开头和结尾快速插入和删除。此外,在 deque 的两端插入和删除永远不会使指向其余元素的指针或引用无效。

它的界面类似于 a,但有效地允许在正面和背面添加: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