【问题标题】:Fastest way to copy the contents of a vector into an array? [duplicate]将向量的内容复制到数组中的最快方法? [复制]
【发布时间】:2012-10-03 17:34:19
【问题描述】:

可能重复:
How to convert vector to array C++

在使用数组时,您可以使用

memcpy( void *destination, const void *source, size_t num );

但是,向量只是为复制方法提供了迭代器,导致 memcpy 无用。将矢量内容复制到另一个位置的最快方法是什么?

【问题讨论】:

  • 在 C++ 中,总是使用std::copy 而不是memcpy(如果可能,前者将委托给后者)。
  • 我不知道它有多快,但你可以使用std::copy
  • 我认为这里最明显的答案是:为什么(你认为)你需要从向量复制到数组中?向量是 i> 一个数组,可以这样使用。作为副作用,根本不复制无疑是最快的复制操作。

标签: c++ vector


【解决方案1】:

std::copy,放下手。它经过高度优化,可以在内部使用最佳可用方法。因此它与memcpy 完全一致。没有理由使用memcpy,即使在 C 样式数组或内存缓冲区之间复制时也是如此。

【讨论】:

    【解决方案2】:

    您可以将 memcpy 与向量一起使用 - 保证向量在内存中是连续的,因此如果向量不为空,您可以使用 &vData[0](其中 vData 是您的向量)作为指向 @987654323 的源指针@

    编辑正如 cmets 对其他答案所提到的,这仅在向量的 value_type 可轻松复制时才有效。

    【讨论】:

    • -1 原因与 ildjarn 在 nosi 的回答下提到的相同。
    • @lidjarn 很公平 - 我不知道,我确信肯定还有其他人不知道,所以我实际上不会删除这个答案。
    【解决方案3】:

    试试这个:-

      std::vector<int> newvector(oldvector);
    

    在数组中复制试试这个:-

      std::copy(source.begin(), source.end(), destination);
    

    【讨论】:

    • -1。 Asker 想要一个数组,而不是一个新的向量。
    • 对不起,我读错了,那么 Rob 的回答会很好:- std::copy(source.begin(), source.end(), destination);
    • 我刚刚更正了。谢谢你告诉!!!:)
    • @Alex,如何将向量用作通过网络传输数据的包。例如,客户想要发送一个 uint32_t 和一个字符串?在服务器端,要从包中解压uint32_t?
    • 使用网络字节排序并通过 ntohl、htonl、ntohs、htons 等进行序列化/反序列化。
    【解决方案4】:

    您必须自己、在您的环境中、通过您的程序来衡量这一点。任何其他答案都会有太多警告。

    当你这样做的时候,这里有一个你可以比较的方法:

    std::copy(source.begin(), source.end(), destination);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-28
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 2021-06-08
      相关资源
      最近更新 更多