2011-04-22 68 views
2

我有一個C++類,它作爲另一個類中的對象的向量而被包含。以對象矢量訪問成員作爲向量

class Small 
{ 

public: 

    int a; 
    int b;  
    int c; 
}; 

class Big 
{ 
public: 

    vector<Small> getSmallVec() const { return m_smallVec;} 

private: 

    vector<Small> m_smallVec;  
}; 

我希望能夠作爲矢量自己訪問小類的成員。換句話說,我想有大的功能一樣

vector<int> getSmallVec_a() 

這將返回一個包含m_smallVec INT小:: A的每個值的向量。我能想到的唯一方法就是遍歷m_smallVec並將其複製到int向量中。有沒有辦法做到這一點,而不復制?

+1

你打算對'getSmallVec_a()'返回的向量執行什麼樣的操作?也許你可以迴歸自己的​​模仿'vector '的班級? – 2011-04-22 20:27:21

回答

2

如果這是您期望訪問數據的方式,並且性能很重要,那麼您是否考慮過使用並行向量?取而代之的

std::vector<Small> 

在「大」你居然保持3個載體

std::vector<int> aVec; 
    std::vector<int> bVec; 
    std::vector<int> cVec; 

的所有元素都在0對應於第0「小」,你可以很容易地單獨出所有從BS。

這會帶來很多煩人的簿記,您必須確保正確無誤地封裝。它不是一個更優雅的解決方案,我通常不喜歡這種類型的東西,可能會在代碼審查中提出質疑,但它可能會爲您描述的操作提供最佳性能。

+0

我可以去平行向量,但我的大部分代碼並不需要平行向量。我可以用矢量< Small >獲得幾乎所有我需要的東西。我正在做的是創建一個簡單的搜索功能(例如,給定輸入int,查找向量< Small >中的元素是否具有與輸入相匹配的成員b),並且不想創建一個新的函數來搜索每個會員。有什麼我可以做的模板和提升? – John 2011-04-22 21:51:44

0

沒有辦法做到這一點,因爲一個向量只是作爲一個數組,這意味着當你創建一個小的向量時,會有2個塊之間的空間:: a變量你要返回什麼只是一系列整數。順便提一下,如果你的函數作爲vector <int> & getSmall()被刪除,那麼效率會更高,因爲如果你沒有返回refrence,它會導致複製m_smallVec並返回結果,這也使得它無法更改m_smallVec中的任何值。