如何有效地将多个数组传递给一个函数
How to pass many arrays to a function effectively?
我必须处理数组,处理这么多数组。我的问题是,是否可以用它们的名称访问它们。例如,我有这个数组a1,a2,a3,。。。,a40,并且我想将它们传递到一个函数中。是否可以将它们的名称保存在另一个变量中并将该变量传递到我的代码中,或者我必须在函数参数中写入所有数组?像这样的东西:
double function(double ***a1,double ***a2,....,double ***a40)
{
.....
}
我想做这样的事情:
char names[40]={a1,...,a[40]};
double function(char names)
{
.....
}
请注意,我希望我的函数作用于数组(a1,a2,…)
您可以使用hash_map
myMap["a10"] = 5.0;
您可以按照上面的建议使用它们名称的哈希,或者只添加更多的*
。
void f(double*** a, double*** b)
{
double*** r = b;
b = a;
a = r;
};
void g(double**** ar)
{
double*** t = ar[0];
ar[1] = ar[0];
ar[0] = t;
}
double a_ = 0, b_ = 0;
double* pa_ = &a_, *pb_ = &b_;
double** ppa_ = &pa_, **ppb_ = &pb_;
double*** arr[2] = {&ppa_, &ppb_};
f(&ppa_, &ppb_);
g(arr);
但正如你所看到的,这个get相当笨拙(****
,哇!)。你能解释一下,在你的代码中有这么多三重指针的情况下,你试图实现什么吗?这让我头疼。
试试这个:
double* arrays[] = {a1, ..., a40};
double function (double* arrays[])
{
...
}
解释
double* array[]
声明了一个指向doubles的指针数组。假设CCD_ 4。。。,a40
是双精度数组,您可以使用它们初始化arrays
数组(数组和指针在某种程度上是同义的)
然后在函数中,你可以使用这个数组,并可以引用每个元素,比如arrays[0]
(相当于a1
)。。。,arrays[39]
(相当于a40
)。
我注意到在a1
、…、。。。,函数原始版本中的a40
。如果确实是这种情况,您可以将上面的double*
替换为double***
。不过,这看起来很可疑——很难正确处理这么多维度。
此外,我上面建议使用地址,而不是数组(*)的名称。这些名称仅供程序员使用,一旦您编译程序,它们就不会出现在可执行文件中,因此您不能通过名称来引用它们。然而,他们的地址是完全可用的。
(*)从技术上讲,数组本身可以被认为是一个指针(因此是地址),所以上面的术语有点不正确,但会帮助您更好地理解正在发生的事情。
其他人已经回答了如何使用映射来操作所需的double***
,但在这种情况下,可能只需要double***
的集合。typedef double*** Array3d
可以帮助解决困惑。这样,定义在阵列上操作的函数就更清楚了:
typedef double*** Array3d;
//Operate on a single 3d array
void function( Array3d array )
{
//Do something... array[x][y][z] +-*/= whatever;
}
//Operate on a collection of 3d arrays.
void function2( Array3d arrays[] )
{
for( unsigned int i = 0; i < ARRAY_SIZE; i++ )
{
//Do something per array... arrays[i][x][y][z] +-*/= whatever;
}
}
如果可行的话,使用std::vector
这样的标准容器将是一个更好的选择。
- 函数向量_指针有不同的原型,我可以构建一个吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何仅为一个函数添加延迟
- 构造函数正在调用一个使用当前类类型的函数
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 如何创建函数管道,以便函数一个接一个地运行?
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 在c++中的复制构造函数/一个声明语句中的初始化的延续中使用chain方法
- C :基类调用自己的虚拟函数 - 一个反图案
- 如何在这个交换函数(一个单独的链表)中找到错误
- 两个相同的函数(一个使用模板模式,另一个不使用)
- 你怎么能一次给一个函数一个参数呢
- 为什么要做两个函数?(一个是非const,另一个是const)
- 当代码在其他地方使用时,如何保证函数一个接一个地被调用