Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将2D内存分配转换为1D向量的最佳方法_C++_Memory_Vector - Fatal编程技术网

C++ 将2D内存分配转换为1D向量的最佳方法

C++ 将2D内存分配转换为1D向量的最佳方法,c++,memory,vector,C++,Memory,Vector,将2D内存分配转换为一维向量的最快方法是什么?现在,我使用嵌套循环通过一次引用每个值来实现。是否可以使用memcpy或copy来提高速度?我有以下资料: Ipp32f* datamem = ippiMalloc_32f_C1(size0, size1, &(steps)); Ipp32f* datamem2 = ippiMalloc_32f_C1(size0, size1, &(steps)); s std::vector<double> result(2*siz

将2D内存分配转换为一维向量的最快方法是什么?现在,我使用嵌套循环通过一次引用每个值来实现。是否可以使用memcpy或copy来提高速度?我有以下资料:

Ipp32f* datamem = ippiMalloc_32f_C1(size0, size1, &(steps)); 
Ipp32f* datamem2 = ippiMalloc_32f_C1(size0, size1, &(steps)); s

std::vector<double> result(2*size0*size1); 
int count = 0; 
for (int i = 0; i < 1; i++){
    for (int j = 0; j < size0; j++){
        for(int k = 0; k < size1; k++){
            Ipp32f* pointer = (Ipp32f)((Ipp8u*)datamem + steps * k + sizeof(Ipp32f) * j); 
            result[count] = *pointer; 
            count++; 
        }
    }
}

for (int i = 1; i < 2; i++){
    for(int j = 0; j < size0; j++){
        for(int k = 0; k < size1; k++){
            Ipp32f* pointer = (Ipp32f)((Ipp8u*)datamem2 + step * k + sizeof(Ipp32f) * j); 
            result[count] = *pointer; 
            count++; 
        }
    }
}
Ipp32f*datamem=ippiMalloc_32f_C1(尺寸0、尺寸1和(步骤));
Ipp32f*datamem2=ippiMalloc_32f_C1(尺寸0、尺寸1和(步骤));s
标准::矢量结果(2*size0*size1);
整数计数=0;
对于(int i=0;i<1;i++){
对于(int j=0;j

此代码创建一个向量,其中每个索引都由datamem和datamem2中的数字存储引用。有更好的方法吗?

datamem的定义在哪里?似乎很重要。如果数组是真正的2D数组,那么它已经是1D数组了,因为2D数组连续存储数据,与1D数组没有什么不同。这意味着您需要发布这个2D数组是如何声明和/或构建的。我将def添加到datamemWhat is
ippiMalloc
?它是否在连续内存中创建数据?您可能可以使用
return std::vector result(memory\u start,memory\u end+1)创建一个向量并忘记所有这些循环。根据,内存被分配为一个块。连续内存始终可以被视为一维数组——您只需要知道如何访问该数组的开头和结尾。
datamem
的定义在哪里?似乎很重要。如果数组是真正的2D数组,那么它已经是1D数组了,因为2D数组连续存储数据,与1D数组没有什么不同。这意味着您需要发布这个2D数组是如何声明和/或构建的。我将def添加到datamemWhat is
ippiMalloc
?它是否在连续内存中创建数据?您可能可以使用
return std::vector result(memory\u start,memory\u end+1)创建一个向量并忘记所有这些循环。根据,内存被分配为一个块。连续内存始终可以被视为一维数组——您只需要知道如何访问该数组的开头和结尾。