分享

C++ Builder中的System::DynamicArray动态数组

 quasiceo 2014-01-01
分类: C++Builder程序设计 2011-04-08 18:23 1784人阅读 评论(0) 收藏 举报

C++Builder里面有动态数组,使用如下:

  1. //==============================================  
  2.   
  3. //数组长度  
  4.   
  5. DynamicArray<int> arrayOfInt;  
  6. arrayOfInt.Length = 10;  
  7. cout << "ArrayLength: " << arrayOfInt.Length << endl;  
  8.   
  9. //==============================================  


释放数组,只有把长度设置为0即可,不可使用delete删去:

 

  1. //==============================================  
  2.   
  3. arrayOfInt.Length = 0;  
  4.   
  5. //==============================================  


访问数据:

  1. void InitArray(DynamicArray<char> &c_array)  
  2. {  
  3.   c_array[0] = 'A';  
  4.   c_array[1] = 'B';  
  5.   cout << "Third char is: " << c_array[2];  
  6. }  
  7.   
  8. //==============================================  


 Low和 High 属性表示数组的上下边界

例如数组求和的函数:

  1. int TotalArray(const DynamicArray<int>& arrayOfInt)  
  2. {  
  3.   int total=0;  
  4.   for (int i=arrayOfInt.Low; i<=arrayOfInt.High; i++)  
  5.     total += arrayOfInt[i];  
  6.   return total;  
  7. }  
  8. 当然也可以这样:  
  9.   
  10. for (int i=0; i<arrayOfInt.Length; i++)  
  11.   
  12. {  
  13.   
  14. total += arrayOfInt[i];  
  15.   
  16. }  
  17.   
  18. //==================================================  


赋值,比较和复制动态数组:

Dynamic Arrays are reference counted. When a DynamicArray is assigned to another, only the reference is assigned (and the reference count adjusted), the content of the source is not copied. Similarly, when two Dynamic Arrays are compared, only the references are compared, not the contents. To copy the contents of a DynamicArray, you must use the Copy (or CopyRange) methods.

  1. //C++ example  
  2.   
  3. void foo(DynamicArray<int> &i_array)  
  4. {  
  5.   DynamicArray<int> temp = i_array;//此处是引用赋值,不复制数据  
  6.   assert(temp == i_array); // temp 和i_array 指向同一内存数据块  
  7.   i_array[0] = 20;//此处改变,实际上就是Temp的值  
  8.   assert(temp[0] == 20); // Temp的值同样也会改变  
  9.   temp = i_array.Copy(); // 赋值数组,此时temp 和i_array 指向不同内存块,  
  10. //但是这两个内存所含数据相同  
  11.   temp[0] = 10;//此时改变temp的值不会改变i_array的值  
  12.   assert(temp[0] != i_array[0]); // Above assignment did not  
  13.                                  // modify i_array.  
  14. }  
  15. //=====================================================  

Multidimensional dynamic arrays(多维数组)
例如2维数组,注意该2维数组可以不是方阵数组,
即数组可以由10行,但每一行的元素个数可以不相同
  1. typedef DynamicArray< DynamicArray < AnsiString > > T2DStringArray;  
  2. void foo(T2DStringArray &s_array)  
  3. {  
  4.   SetLength(s_array, 10);  
  5.   for (int i=0; i<s_array.Length; i++)  
  6.   { // Set lengths of second dimensions.(NOTE: non-rectangular)  
  7.     SetLength(s_array[i], i+1);  
  8.     for (int j=0; j<s_array[i].Length; j++)  
  9.       s_array[i][j] = itoa(i*10+j);  
  10.   }  
  11. }  
  12.   
  13. //===================================================== 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多