⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_34293.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:34293 发表者:lz 发表日期:2003-03-28 12:32:13
<br>主题:如何动态的生成一个二维数组
<br>内容:rt
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:bird 回复日期:2003-03-28 12:54:34
<br>内容:假设二维数组的元素是 Class T, 则可生成一个 template &lt;class T&gt;的动态二维数组。 必须注意以下几点。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;1,必须自定义一个以行数、列数为参数的构造函数。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;2,必须自定义析构函数,以保证在析构该二维数组类的同时确实清除所有元素的内存空间。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;3,为了使用方便,建议重载括号操作符,实现对元素的引用。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;4, 建议查看 CArray 的源码,以确认每个步骤。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;下面是基本框架: <BR>&nbsp;&nbsp;&nbsp;&nbsp;头文件: <BR>&nbsp;&nbsp;&nbsp;&nbsp;#include &lt;afxtempl.h&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;template &lt;class T&gt; class C2dArray: public CArray&lt;CArray&lt;T, T&amp;&gt;, CArray&lt;T,T&amp;&gt;&amp;&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;protected: <BR>&nbsp;&nbsp;&nbsp;&nbsp; short row, col; <BR>&nbsp;&nbsp;&nbsp;&nbsp;public: <BR>&nbsp;&nbsp;&nbsp;&nbsp; C2dArray(); <BR>&nbsp;&nbsp;&nbsp;&nbsp; C2dArray(short row, short col); <BR>&nbsp;&nbsp;&nbsp;&nbsp; SetSize(short row, short col); <BR>&nbsp;&nbsp;&nbsp;&nbsp; virtual ~C2dArray(); <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; T&amp; operator () (short row, short col); // 重载括号操作 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;}; <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;template &lt;class T&gt; inline T&amp; C2dArray&lt;T&gt;::operator () (short row, short col) <BR>&nbsp;&nbsp;&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;..... <BR>&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;CPP 文件: <BR>&nbsp;&nbsp;&nbsp;&nbsp;template &lt;class T&gt; C2dArray&lt;T&gt;::C2dArray() <BR>&nbsp;&nbsp;&nbsp;&nbsp;{ SetSize(0,0);} <BR>&nbsp;&nbsp;&nbsp;&nbsp;template &lt;class T&gt; C2dArray&lt;T&gt;::C2dArray(short row, short col) <BR>&nbsp;&nbsp;&nbsp;&nbsp;{ SetSize(row,col);} <BR>&nbsp;&nbsp;&nbsp;&nbsp;template &lt;class T&gt; C2dArray&lt;T&gt;::SetSize(short row, short col) <BR>&nbsp;&nbsp;&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;..... <BR>&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;&nbsp;&nbsp;template &lt;class T&gt; C2dArray&lt;T&gt;::~C2dArray() <BR>&nbsp;&nbsp;&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;... <BR>&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;&nbsp;&nbsp;C++ 的 new 操作直接支持多维数组的申请。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:bird 回复日期:2003-03-28 12:55:20
<br>内容: 用这两个宏<BR>&nbsp;&nbsp;&nbsp;&nbsp;#define matrix_allocate(matrix, width, height, TYPE) {\ <BR>&nbsp;&nbsp;&nbsp;&nbsp; matrix = new TYPE* [height];\ <BR>&nbsp;&nbsp;&nbsp;&nbsp; for(int _i = 0; _i &lt; height; _i++)\ <BR>&nbsp;&nbsp;&nbsp;&nbsp; matrix[_i] = new TYPE[width];\ <BR>&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;&nbsp;&nbsp;#define matrix_delete(matrix, width, height){\ <BR>&nbsp;&nbsp;&nbsp;&nbsp; for(int _i = 0; _i &lt; height; _i++)\ <BR>&nbsp;&nbsp;&nbsp;&nbsp; delete [] matrix[_i];\ <BR>&nbsp;&nbsp;&nbsp;&nbsp; delete [] matrix;\ <BR>&nbsp;&nbsp;&nbsp;&nbsp; matrix = 0;\ <BR>&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp; 
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -