2013-10-11 50 views
0

給定這樣一個結構,我該如何創建一個可擴展(向量)數組?C++用指針創建一個可擴展的數組

struct IntArray { 
    int size; 
    int capacity; 
    int *contents; 
}; 

我想用INT *內容指向整數數組,只是改變指針作爲IntArray擴大了,但我怎麼知道是什麼尺寸,使我的整數的初始陣列?

+0

「可擴展陣列」你的意思是'的std :: VECTOR' – aaronman

+0

是像一個矢量 – user1985251

+0

你爲什麼不只是使用矢量 – aaronman

回答

1

作爲@aaronman說,這將是不適合你,如果我們只是給你的最終解決方案:如果你想學習的東西,你最好試試這個你自己從頭開始(否則只使用現有的std::vectorQVector或任何向量)。

所以相反,我建議你看一些教程或靈感的一些exapmles,然後從頭開始。即使簡單谷歌搜索c++ tutorial implementing dynamic array將提供一些可容忍的視頻like this以及一些文字鏈接。

後,您與實施細則明確,你可能會想設計自己的陣列的接口,並考慮點可以如下:

  1. 使struct這個class,而不是使字段默認爲私有(encapsulation
  2. 在構造函數中執行初始分配並在內部執行中取消分配(請參閱@juanchopanza的註釋)。拷貝構造函數和賦值操作符都還不錯,但恕我直言,可在此時被忽略(例如,你可以讓他們私人不執行簡單地禁止複製)
  3. 實現所有的功能方法,例如,一種方法push_back可能會增加結束。您會看到添加元素可能導致重新分配,因此將重新分配過程提取到另一個(可能是私有的)方法(使其可重用)並使用該視頻中的想法實施它,然後將其從push_back中調用,如果size == capacity
  4. 瞭解運算符重載,並實現operator []以像訪問正常數組一樣訪問元素。
  5. ...繼續添加功能,直到你喜歡你的實現:)我認爲這是重要的,當學習享受創造一些整潔。

最後,您可以將您的實施與std::vector或其他現有的動態數組進行比較,以查看您是否缺少某些東西。大約三年前,我不得不自己執行我的文憑工作中的矢量(爲了細緻地控制其修改和重新分配的性能原因),您可能還會檢查it,但是(免責聲明!)您可能會發現它有點複雜和雜亂後,我所有的優化:)

繼續!希望這有助於(並激勵你一點)。