【发布时间】:2013-08-15 16:01:40
【问题描述】:
我有一个std::vector<T> 变量。我还有两个 T 类型的变量,第一个代表向量中要插入的值,第二个代表要插入的值。
假设我有这个容器:1,2,1,1,2,2
根据上面的定义,这两个值分别是 2 和 3。然后我想写一个函数来更新容器,而不是包含:
1,2,3,1,1,2,3,2,3
我正在使用 c++98 和 boost。我可以使用哪些 std 或 boost 函数来实现此功能?
遍历向量并使用 std::insert 是一种方法,但是当您意识到您需要记住跳过刚刚插入的值时,它会变得混乱。
【问题讨论】:
-
你知道这种带有 std::vector 的算法的效率问题吗?每次插入一个值时,都会复制向量的其余部分。因为 std::list 可能不是一个好的解决方案,所以我可以想到一个只移动一次元素的就地算法。但不知道Boost中是否存在。
-
我没有谈到重新分配向量。元素之间没有多余的空格,向量的主要特征之一是具有连续的数据。当然,如果您总是在末尾插入,则不会出现问题。好吧,请参阅我对就地工作的算法的回答。
-
@PierreT.:对不起,我不明白你在说什么。是的,您想像 Benjamin Lindley 的回答所示那样执行此操作:将数据放入一个新向量中,以便您始终在最后添加数据,然后将内容交换回原始向量。
-
@JerryCoffin:嗯,正如我所说,我有一个解决方案,它不使用双倍内存,只复制一次元素(就像在 Benjamin 的回答中一样)。
-
@JerryCoffin 我的答案是看不见的还是你不想看?