gpt4 book ai didi

c++ - 将双端队列或后进先出容器转换为 std::vector

转载 作者:行者123 更新时间:2023-11-30 02:21:11 25 4
gpt4 key购买 nike

我有以下用例:

  • containerTypeX 我在前面插入许多元素的对象
  • containerTypeX 对象插入所有内容后,containerXType 对象需要转换为 std::vector

对于 containerTypeX,我选择了 std::deque 而不是 std::vector,因为据我所知,在std::vector 效率不高。但现在我必须将 std::deque 转换为 std::vector 并且不想将队列中的每个元素分别移动到 vector 中,例如

v.emplace_back(std::move(q.front()));

1) 有没有办法直接将我的队列转换为我缺少的 vector ?

2) 我应该使用像 std::stack 这样的后进先出容器而不是 std::deque 因为我只插入一侧吗?但这会给我留下一个问题,即当转换为 std::vector 时,还需要反转元素顺序...

相关问题:How to convert std::queue to std::vector

最佳答案

I chose std::deque over std::vector, because as far as I know inserting at the begin of a std::vector is not efficient

正确。

1) Is there a way to directly convert my queue to a vector that I am missing?

如何使用 std::vector 构造函数将元素从旧容器移动到新 std::vector ,该构造函数接受开始/结束迭代器和 std::make_move_iterator 适配器?

我是说

std::vector<containedType> v(std::make_move_iterator(q.begin()),
std::make_move_iterator(q.end()));

qstd::deque 吗?

2) Should I use a LIFO container like std::stack instead of std::deque as I am only inserting one one side? But this will leave me the problem that in addition the element ordering needs to be reversed when converted to the std::vector...

你可以使用反向迭代器做同样的事情

std::vector<containedType> v(std::make_move_iterator(s.rbegin()),
std::make_move_iterator(s.rend()));

s 是后进先出容器。

但是,正如评论中所建议的,您确定需要这种转换吗?如果您使用 std::vector 作为 LIFO 容器(因此在末尾添加元素),如何使用反向运算符反转它呢?

关于c++ - 将双端队列或后进先出容器转换为 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48824781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com