【发布时间】:2018-02-16 10:30:31
【问题描述】:
我有以下用例:
-
containerTypeX我在前面插入许多元素的对象 -
containerTypeX对象插入所有内容后,containerXType对象需要转换为std::vector
对于containerTypeX,我选择std::deque 而不是std::vector,因为据我所知,在std::vector 的开头插入效率不高。
但是现在我必须将 std::deque 转换为 std::vector 并且不想将队列中的每个元素分别移动到向量中,例如
v.emplace_back(std::move(q.front()));
1) 有没有办法直接将我的队列转换为我丢失的向量?
2) 我应该使用像std::stack 这样的LIFO 容器而不是std::deque,因为我只插入一侧?但这会给我留下一个问题,即在转换为std::vector时需要反转元素排序...
【问题讨论】:
-
为什么一定要在前面插入呢?就不能直接插在后面假装容器倒过来吗?
-
@user463035818 此外,您可以使用
std::reverse反转vector中元素的顺序。如果元素交换是有效的,这应该很快。 -
插入与图路径探索算法有关。一旦我找到路径中的最后一个元素,我就会回溯并在前面插入先前的节点,以使整个路径按正确的顺序排列。
-
@DanielLangr 据我了解 OP,他们只希望“containerTypeX”有效地填充它,然后除了将其转换为向量之外什么都不做,所以实际上元素的顺序根本不重要
-
这几乎就像在创建
std::vector::rbegin()和std::vector::rend()时计划使用的一样