使用C ++ 98将矢量的一部分移动(不复制)到另一个矢量

时间:2018-01-30 13:53:30

标签: c++ vector move-semantics c++98

在C ++ 11中,我们可以执行以下操作:

std::vector<int> A(n);
std::vector<int> B; 
// I want to move part of A (from A[start] to A[end]) to B
std::move(A.begin()+start,A.begin()+end,std::back_inserter(B));
// in C++98 there is no move operator, so use copy (assign)
B.assign(A.begin()+start, A.begin()+end);

C ++ 98中是否有任何方法可以执行与C ++ 11实现类似的操作。 目标是节省时间和使用移动而不是复制矢量,你有任何想法吗?

在实际代码中,我不使用int,它是对象的向量。

2 个答案:

答案 0 :(得分:1)

不幸的是,移动语义在C ++ 98中不可用,(因为它们是在C ++ 11中引入的),但是对于给出的示例,移动整数与复制它们没有太大区别,因此实际的性能差异如果有的话,应该可以忽略不计。

答案 1 :(得分:1)

虽然在C ++ 98中不存在移动语义,但是你总是可以编写一些能够在这种情况下自行完成同等操作的东西。

快速简单的方法是在您计划使用的类上引入“moveTo”函数,然后使用您要将其移动到的位置的引用/指针调用它。

值得强调的是,我已经说过“在你的课堂上”;因为正如Arnav Borborah所说,你的榜样太微不足道了,无法发挥作用;但我强调这个选项,以防它是一个糟糕的例子。