多维数组——整数类型
来源:互联网 发布:现代网络语言的英文 编辑:程序博客网 时间:2024/06/05 09:21
#include <stdarg.h>
#include <stdlib.h>
#include <math.h>
class CArray
{
public:
CArray();
CArray( int iDim, ... );
virtual ~CArray();
void SetDim( int iDim, va_list vp );
bool SetValue( int iValue, ... );
int GetValue( int iValue, ... );
protected:
int Locate( va_list vp );
private:
int m_iDim; //维数
int* m_pBound;//数组的维数元素个数
int* m_pBase; //数组基址
int* m_pConstants;//数组映像函数常量地址
};
CArray::CArray()
{
}
CArray::CArray( int iDim, ... )
{
va_list vl;
va_start( vl, iDim);
SetDim( iDim, vl );
va_end( vl );
}
CArray::~CArray()
{
if( m_pBase )
{
free( m_pBase );
m_pBase = NULL;
}
if( m_pBound )
{
free( m_pBound );
m_pBound = NULL;
}
if( m_pConstants )
{
free( m_pConstants );
m_pConstants = NULL;
}
}
bool CArray::SetValue( int iValue, ... )
{
va_list vl;
va_start( vl, iValue );
int iOff = Locate( vl );
m_pBase[iOff] = iValue;
return true;
}
//此处iValue无用 对va_start理解不完备
int CArray::GetValue( int iValue, ... )
{
va_list vl;
va_start( vl, iValue );
int iOff = Locate( vl );
iValue = m_pBase[iOff ];
return iValue;
}
int CArray::Locate( va_list vp )
{
int iOff = 0;
for( int i = 0; i < m_iDim; ++i )
{
int iCur = va_arg( vp, int );
iOff += iCur * m_pConstants[i];
}
return iOff;
}
void CArray::SetDim( int iDim, va_list vp )
{
m_iDim = iDim;
m_pBound = (int*)malloc( m_iDim * sizeof( int ) );
if( !m_pBound )
{
exit( OVERFLOW );
}
int iNum = 1;
for( int i = 0; i < iDim; ++i )
{
m_pBound[i] = va_arg( vp, const int );
iNum *= m_pBound[i];
}
m_pBase = (int*)malloc( iNum * sizeof( int ) );
m_pConstants = (int*)malloc( m_iDim * sizeof(int ) );
m_pConstants[ m_iDim - 1 ] = 1;
for( int iPos = m_iDim - 2; iPos >= 0; --iPos )
{
m_pConstants[iPos] = m_pConstants[iPos + 1] * m_pBound[ iPos + 1 ];
}
}
int main(int argc, char* argv[])
{
CArray arr( 3, 3, 2, 5);
int iValue = 0;
for( int i = 0; i < 3; ++i )
{
for( int j = 0; j < 2; ++j )
{
for( int k = 0; k < 5; ++k )
{
arr.SetValue(iValue++, i, j, k );
}
}
}
for( int iPos = 0; iPos < 3; ++iPos )
{
for( int j = 0; j < 2; ++j )
{
for( int k = 0; k < 5; ++k )
{
int iValue;
int iCur = arr.GetValue(iValue, iPos, j, k );
printf( "%d ", iCur );
}
printf( "\n");
}
printf( "\n");
}
return 0;
}
- 多维数组——整数类型
- 数组类型 多维参数
- 数组类型和多维数组传参
- 数组类型和多维数组本质
- 第八章——多维数组
- java基础——多维数组
- JavaSe基础XX04——多维数组
- 数据结构——字符串和多维数组
- [数据结构]非线性结构——多维数组
- Java学习笔记——多维数组
- java基础——多维数组
- Java学习——多维数组
- 反汇编——多维数组
- Java——java多维数组和C多维数组的一点小区别
- 学习二维数组——没有多维数组
- C提高——数组、数组数据类型、数组数据类型指针、多维数组本质等
- 动态创建多维数组——才不简单
- 数据结构笔记——第四章字符串和多维数组
- 如何在Linux中架设一台域名服务器
- 不要让“知识”限制了你的思维
- win32 SDK入门
- JSlider
- 线程让步
- 多维数组——整数类型
- ComboBox
- .NET源码中的二分查找实现
- JAVA中的StringBuffer类
- 转发乐评IV(惘闻)的评论:污水塘的世界
- CentOS6.5 使用ntpd同步时间的方法
- android中常用的弹出提示框
- 第二十四题(链表的逆序)
- JAVA中的StringTokenizer类