假设我有3个 double 数组a1[]
,a2[]
和a3[]
,它们的长度分别为L1,L2,L3
假设我要“虚拟”连接这些数组,即我想创建一个虚拟
数组a_virtual[]
,这样从逻辑上讲a_virtual = {a1[L1], a2[L2], a3[L3]}
,尽管在物理上这些数组可能彼此不连续。
因此,如果我想访问a_virtual[5]
和L1=2
,L2=3
,L3=1
,则将获取a3[0]
。要访问a_virtual[0]
,将获取a1[0]
我该怎么做
C语言中的
C++中的
也有用)
我怀疑是否有一种方法可以对所有三个环境使用相同的方法,但是根据环境的不同,可能在每个环境中都有更有效的方法可以做到这一点。
提供的功能。
最佳答案
这是使用链表和(尾)递归的C语言解决方案:
#include <stdio.h>
struct dblarr {
double *data;
size_t len;
struct dblarr *next;
};
double *fetch(const struct dblarr *arr, size_t index) {
if (arr == NULL) return NULL;
if (index < arr->len) return arr->data + index;
return fetch(arr->next, index - arr->len);
}
int main(void) {
double a1[2] = {1, 2};
double a2[3] = {1, 2, 3};
double a3[1] = {1};
struct dblarr x1, x2, x3;
x1.data = a1; x1.len = sizeof a1 / sizeof *a1; x1.next = &x2;
x2.data = a2; x2.len = sizeof a2 / sizeof *a2; x2.next = &x3;
x3.data = a3; x3.len = sizeof a3 / sizeof *a3; x3.next = NULL;
printf("before %f\n", *fetch(&x1, 5));
*fetch(&x1, 5) = 0.42;
printf(" after %f\n", *fetch(&x1, 5));
return 0;
}
您可以在http://ideone.com/mY0ix上“查看正在运行的代码”。
关于c++ - 与数组的虚拟串联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9231186/