【问题标题】:Which STL container could grow in both directions?哪个 STL 容器可以双向增长?
【发布时间】:2019-10-01 04:44:30
【问题描述】:

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

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

欣赏你的想法。

谢谢

维诺德

【问题讨论】:

  • 双端队列容器。
  • 你试过双端队列吗?

标签: c++ stl containers


【解决方案1】:

这听起来正是 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

【讨论】:

    猜你喜欢
    • 2010-12-06
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2012-11-23
    • 2018-12-03
    • 1970-01-01
    • 2010-11-18
    相关资源
    最近更新 更多