[]運算子的重載和二維數組類的[][]運算子多載(續) —- 編寫可變大小的二維數組類

來源:互聯網
上載者:User

在上一篇《[]運算子的重載和二維數組類的[][]運算子多載》中討論了[]運算子的重載以及通過兩次重載的疊加使得二維數組類可以用 a[i][j] 的形式訪問。上一篇重點研究運算子的重載,所以代碼是示範性質,一維數組類和二維數組類的實現和C/C++的內建數群組類型相比差別不大,沒有什麼特別的優點。而且二維數組類使用了指標的指標,這也使得代碼可讀性不好。如果把一維數組改為變長的,即聲明執行個體後可以隨時改變大小的話,那麼二維數組中只用指標就行了,不需要使用指標的指標。對上一篇中的代碼進行一些修改,去掉了一維數組的實現,直接用MFC的CWordArray,並且不再用指標的指標,而改由用指標來工作,代碼清晰了很多,二維數組實現為可變長度的,比原來更具有實用價值。代碼如下:

-----------------------------------------------------------------------------------------------

//二維WORD數組
class C2DimWordArr
{
private:

 CWordArray *m_p;//主指標
 long m_row,m_column;//行數,列數。

public:
 C2DimWordArr()
 {
  m_p=NULL;
 }
 void SetSize(long row,long column)
 {
  if (NULL!=m_p){delete[] m_p;m_p=NULL;}
  m_p=new CWordArray[row];
  for (long i=0;i<row;i++)
   m_p[i].SetSize(column);
  m_row=row;
  m_column=column;
 }
 CSize GetSize()
 {
  return CSize(m_row,m_column);
 }

 ~C2DimWordArr()
 {
   if (NULL!=m_p){delete[] m_p;m_p=NULL;}
 }
 CWordArray& operator[](long idx)
 {
  return m_p[idx];
 }
};

-----------------------------------------------------------------------------------------------

測試代碼(環境:VC++6,Win32 EXE對話方塊工程):

-----------------------------------------------------------------------------------------------

 C2DimWordArr c2dwa;c2dwa.SetSize(4,3);
 long i,j;
 for (i=0;i<4;i++)
  for (j=0;j<3;j++)
   c2dwa[i][j]= i*10 + j ;

 CString s,stmp;
 for (i=0;i<4;i++)
  for (j=0;j<3;j++)
  {
   stmp.Format("[%d][%d] =  %d /n", i,j,c2dwa[i][j]) ;
   s+=stmp;
  }
 AfxMessageBox(s);

 s="";
 c2dwa.SetSize(2,9);
 CSize siz= c2dwa.GetSize();
 for (i=0;i<siz.cx ;i++)
  for (j=0;j<siz.cy ;j++)
   c2dwa[i][j]= i*10 + j ;

 for (i=0;i<siz.cx ;i++)
  for (j=0;j<siz.cy ;j++)
  {
   stmp.Format("[%d][%d] =  %d /n", i,j,c2dwa[i][j]) ;
   s+=stmp;
  }
 AfxMessageBox(s);

-----------------------------------------------------------------------------------------------

在這個寫法的基礎上,只要再進行擴充,就可以完成更多更複雜的任務,比如可以在重新分配大小的時候保持原來的資料,訪問元素的時候進行越界檢查,疏鬆陣列等等。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.