C ++最有效的方法是将大量向量转换为字符向量的两倍

时间:2014-09-29 17:48:42

标签: c++ vector casting stdvector

我有一些代码可以进行一些计算,然后返回vectors vectors doublesvectors({1}}(矩阵)的很多(数千甚至数十万)。这些值已经四舍五入到最接近的整数,并且永远不会超过一个字节的最大大小。矩阵将展平为一维doubles,然后将二进制数据写入文件。但是,我不想将这些值存储为chars,因为它们会占用更多空间。它们需要存储为doubles,但返回它们的代码总是会给我双打,所以我想知道将chars转换为vectors的最快方法是什么。

我特意寻找一种方法将一种类型的{{1}}转换为另一种类型,因为向量很容易写入文件。

3 个答案:

答案 0 :(得分:0)

您是否尝试过std::copystd::transform?似乎它应该非常简单。

答案 1 :(得分:0)

您可以在此模式下毫无问题地投射矢量:

const char* VectToChar = (char*)&Vector[0];

在以下代码中,您可以找到完整的示例。警告此代码仅对矢量数据读取有效,而不是写入!

#include <stdio.h>
#include <vector>

using namespace std;

 int _tmain(int argc, _TCHAR* argv[])
{

    vector<double> Vector;

    Vector.push_back(10.2);
    Vector.push_back(15.2);


    // You can use this method only for data reading, no writing!!
    const char* VectToChar = (char*)&Vector[0];


    // Test
    double d0 = *((double*)VectToChar);
    double d1 = *((double*)(VectToChar+sizeof(double)));
    printf("%f, %f", d0, d1);

    return 0;
}

答案 2 :(得分:0)

我最终在计算中编写了最后一个方法的char版本。比复制或做更复杂的东西更容易。