【问题标题】:Moving (not copying) part of a vector to another vector using C++98使用 C++98 将向量的一部分移动(不复制)到另一个向量
【发布时间】:2018-07-09 10:34:02
【问题描述】:

在 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,它是对象的向量。

【问题讨论】:

  • 澄清一下,真实代码是否也使用ints?如果是这样,向量的移动部分与复制没有什么不同。
  • c++98 没有移动语义...但是对于您的示例,移动 int 相当于复制它。
  • @HolyBlackCat ,在实际代码中它不是 int .... 它是一个对象

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    虽然 C++98 中不存在移动语义,但对于这种情况,您始终可以自己编写一些等效的东西。

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

    值得强调的是,我说过“在你的课堂上”;因为正如 Arnav Borborah 所说,你的例子太微不足道了,无法产生影响;但我会突出显示这个选项,以防它是一个糟糕的例子。

    【讨论】:

      猜你喜欢
      • 2012-08-09
      • 1970-01-01
      • 2020-10-13
      • 2011-08-13
      • 2019-08-13
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      相关资源
      最近更新 更多