一个动态多维数组的实现
2007-05-04 10:43
776 查看
只是一个想法的实现,投入到实际应用中还需进一步完善
作者:李嘉
未经书目许可,禁止任何商业目的的转载
作者:李嘉
未经书目许可,禁止任何商业目的的转载
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <stdarg.h> ////////////////////////////////////////////////////////////////////////// // // Code By : LiJia, http://blog.csdn.net/imjj // Date : 2007-05-04 // Purpose : a mulidim, dynamic array show ////////////////////////////////////////////////////////////////////////// struct Array { int dim; int * dims; int * data; }; Array * array_create(int dim, ...) { if (dim < 1 ) return NULL; int i; int * dims; int total_elems = 1; Array * array = NULL; // parse arguments va_list argptr; va_start(argptr, dim); dims = (int*)malloc(dim * sizeof(int)); for (i = 0; i < dim; i++) { dims[i] = va_arg(argptr, int); total_elems *= dims[i]; } // create the array array = (Array*)malloc(sizeof(Array)); array->dim = dim; array->dims = dims; array->data = (int*)malloc(total_elems * sizeof(int)); return array; } void array_free(Array * array) { free(array->dims); free(array->data); free(array); } int * array_get(Array * array, ...) { int i, j; int pos = 0; int n; int exp; va_list argptr; va_start(argptr, array); for(i = 0; i < array->dim; i++) { n = va_arg(argptr, int); //TODO: check n in range [0, array->dims[i]] here exp = 1; //TODO: a more effective pos calculate algorithm for (j = array->dim - 1; j > i; j--) exp *= array->dims[j]; pos += n * exp; } return array->data + pos; } int array_size(Array * array) { int size = 1; int i; for (i = 0; i < array->dim; i++) size *= array->dims[i]; return size; } const int I = 5, J = 5, K = 5; int main(int agrc, char * argv []) { Array * array = array_create(3, I, J, K); // create a 3 dim and size [5][5][5] array int i, j, k; int size = array_size(array); for (i = 0; i < size; i++) array->data[i] = (i + 1); for(int i = 0; i < I; i++) { for (j = 0; j < J; j++) { for (k = 0; k < K; k++) printf("a[%d][%d][%d] = %d/n", i, j, k, *array_get(array, i, j , k)); } } array_free(array); return 0; }
相关文章推荐
- c语言实现一个简单的通用动态数组
- 纯c语言实现动态分配多维数组的方法
- 有关动态多维数组的一个问题
- 一个动态数组的实现.
- java数组反射实现动态的判断一个对象是否是数组并且对数组进行拆包输出
- 纯c语言实现动态分配多维数组的方法
- Java数组反射实现动态的判断一个对象书否是数组,并且对数组进行拆包输出 。。
- 一个动态数组实现的简单栈
- 一个关于动态多维数组的问题
- Java数组反射实现动态的判断一个对象书否是数组,并且对数组进行拆包输出 。。
- linux shell实现求一个多维数组中的最大和最小值
- 定义一个数组类(Array),要求动态分配大小,并在此基础上实现以下的两个子类:?反转类?排序类
- Java数组反射实现动态的判断一个对象书否是数组,并且对数组进行拆包输出 。。
- linux shell实现求一个多维数组中的最大和最小值
- SilvetLight 实现的一个上传图片时功能动态裁剪部分区域和缩放图片的功能
- 写一个算法,使对象可以像数组一样进行foreach循环,要求属性必须是私有的(Interator模式的PHP5实现,写一类实现Interator接口)
- 经典面试题:求数组的最大子序列和;实现函数 :判断一个自负喜欢是否是另一个字符串旋转所得;杨氏矩阵中查找一个数。
- jQuery实现动态添加和删除一个div
- 一个数组中只有两个数字是出现一次,其他所有数字都成对出现,找出这两个数字,编程实现
- C++ 以传入vector的方式实现返回一个数组