设置2-dim double数组的最快方法是什么,例如double x [N] [N] all为-1?
我尝试使用memset,但失败了。有什么好主意吗?
答案 0 :(得分:2)
使用algorithm
std::fill_n(*array, sizeof(array) / sizeof (**array), -1 );
示例:
double array[10][10];
std::fill_n( *array, sizeof(array) / sizeof (**array), -1.0 );
//Display Matrix
for(auto i=0;i<10;i++)
{
for(auto j=0;j<10;j++)
cout<<array[i][j]<< " ";
cout<<endl;
}
答案 1 :(得分:1)
您也可以直接设置
double x[4][4] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}
如果数组索引很小。
答案 2 :(得分:1)
一个简单的循环:
#include <stdio.h>
int main(void)
{
#define N 5
double x[N][N];
size_t i, n = sizeof(x) / sizeof(double);
for (i = 0; i < n; i++)
x[0][i] = -1.0;
for (i = 0; i < n; i++)
printf("%zu) %f\n", i, x[0][i]);
}
答案 3 :(得分:1)
// create constants
const int rows = 10;
const int columns = 10;
// declare a 2D array
double myArray [rows][columns];
// run a double loop to fill up the array
for (int i = 0; i < rows; i++)
for (int k = 0; k < columns; k++)
myArray[rows][columns] = -1.0;
// print out the results
for (int i = 0; i < rows; i++) {
for (int k = 0; k < columns; k++)
cout << myArray[rows][columns];
cout << endl;
}
答案 4 :(得分:0)
使用std::array
及其fill
方法:
#include <array>
#include <iostream>
int main()
{
const std::size_t N=4
std::array<double, N*N> arr; // better to keep the memory 1D and access 2D!
arr.fill(-1.);
for(auto element : arr)
std::cout << element << '\n';
}
答案 5 :(得分:0)
使用C ++容器,您可以使用填充方法
array<array<double, 1024>, 1024> matrix;
matrix.fill(-1.0);
如果出于某种原因,你必须坚持使用C风格的数组,你可以手动初始化第一行,然后将memcpy初始化为其他行。无论您是将其定义为静态数组还是逐行分配,都可以使用。
const int rows = 1024;
const int cols = 1024;
double matrix[rows][cols]
for ( int i=0; i<cols; ++i)
{
matrix[0][cols] = -1.0;
}
for ( int r=1; r<rows; ++r)
{
// use the previous row as source to have it cache friendly for large matrices
memcpy(&(void*)(matrix[row][0]), &(void*)(matrix[row-1][0]), cols*sizeof(double));
}
但我宁愿尝试从C风格数组转移到C ++容器而不是做那种特技。
答案 6 :(得分:0)
memset
,因为它基于void *
。所以所有字节都是相同的。 (float)
-1
为0xbf800000
(double
0xbff0000000000000),因此并非所有字节都相同......
我会使用手动填充:
const int m = 1024;
const int n = 1024;
double arr[m][n];
for (size_t i = 0; i < m*n; i++)
arr[i] = -1;
矩阵就像内存中的数组一样,所以最好有1个循环,它稍快一些。
或者您可以使用此:
std::fill_n(arr, m*n, -1);
不确定哪一个更快,但两者看起来相似。所以你可能需要进行小测试才能找到它,但据我所知,人们通常会使用其中一种。还有一件事,第一件事就是C
对某些编译器来说它不起作用,第二件就是真正的C++
它永远不会对C
起作用。所以你应该选择我认为的编程语言:)