在 C 语言里面,不规则的二维数组有什么比较方便高校的复制方法吗?
就像标题说的,我现在需要将数组从一个不规则的二维数组中复制到另外一个二维数组中,这两个二维数组都是不规则的,而且结构是不一样的,只是所能容纳元素的总长度相等,这种问题,有什么高效的方法吗?谢谢大家了!
就像标题说的,我现在需要将数组从一个不规则的二维数组中复制到另外一个二维数组中,这两个二维数组都是不规则的,而且结构是不一样的,只是所能容纳元素的总长度相等,这种问题,有什么高效的方法吗?谢谢大家了!
如果只是按内存地址顺序复制,那直接 memcpy 就好了。
举个例子: 一个 int 数组拷贝到一个 char 数组中, 两个数组的基本元素结构并不一样, int 占 4 字节(假设), char 占 1 字节, 这个结构只影响你后续怎么使用这个数组, 但是拷贝的话是不看结构的, memcpy 前两个参数为 void* 就应该明白这一点
n 段内存复制到 m 段内存,n≠m 的时候怎么做映射?
假设 n 段内存的长度为 n1,n2,n3,n4,n5,m 段内存的长度为 m1,m2,m3,m4,m5,n1 要复制到 m1, n1>m1 怎么办,n1<m1 又怎么填充?
你最好不要描述得那么抽象,直接把你想解决的问题说出来给大家听听。
我建议对问题做进一步补充:
既然要问的是有什么“高效的”方法,那不妨贴一段代码来展示作为 baseline 的实现。
我觉得没办法吧,就是比较长短。短的部分直接拷贝,拷贝后长的部分减去相应长度,继续下一次拷贝
我觉得你这个需求多半是可以塞进连续内存里的。要解析的时候写个 struct reinterpret_cast 一下就好了。
主的需求只能用 yacc 写个转换代码生产机,自动生成 C 代码
循环操作
写个函数
就是设计一个你 n 段内存数据到 m 段内存数据对应规则的描述语法 X,然后 yacc 设计一个简单的编译器把用语法 X 写的对应规则编译成相应的 C 语言源代码。
这个 X 语法很简单,比如
(n1, len1),(n2, len2),(n3, len3) -> (m1, len4),(m2, len5)
其中 len1+len2+len3==len4+len5
表示把 n 段内存中 3 段数据复制到 m 段内存中的 2 段。
当然也可以不用 yacc 直接解析也行。
当然用 c++直接 template 好了,实在不行还可以用 gsl