2017-06-05 39 views
-2

我有一些容器的數據,並考慮將它們放入一個結構(更容易給它的功能等)。該程序應儘可能快。訪問結構體中的容器是慢還是完全一樣?C++ STL容器的性能。更好的速度在結構或無結構?

// data without struct 
double d1; 
bool b1; 
std::map<std::string, std::deque<double>> map1; 
std::vector<std::deque<int>> a1; 
std::vector<std::deque<int>> a2; 
std::vector<std::vector<<std::deque<int>>> a3; 
std::vector<std::vector<<std::deque<int>>> a4; 
// ... and perhaps even more 

VS

struct containerstruct 
{ 
    double d1; 
    bool b1; 
    std::map<std::string, std::deque<double>> map1; 
    std::vector<std::deque<int>> a1; 
    std::vector<std::deque<int>> a2; 
    std::vector<std::vector<<std::deque<int>>> a3; 
    std::vector<std::vector<<std::deque<int>>> a4; 
    // ... and perhaps even more 
}; 
containerstruct data; 
+4

那麼,你有沒有測量?過早優化是所有邪惡的根源:) – Rakete1111

+2

不會有任何區別。但你爲什麼不嘗試一下呢? – DeiDei

+2

這取決於你如何使用它。不要在乎現在過早的優化,首先要確保你有一個可讀,可維護和可行的好程序。然後,如果性能不符合您衡量和測試的要求,並找出瓶頸,並專注於其中的前幾名。 –

回答

2

這僅僅是另一個那些 「將我的程序運行速度更快,如果我使用全局變量?」的問題。幸運的是,與20多年前的情況不同,現在的答案是響亮的

使用現代的優化編譯器,生成的代碼將幾乎完全相同。在最差,你將有一個指針取消引用來訪問一個字段,這不會在性能上產生可察覺的差異。

因此,您應該編寫可讀性和可維護性的代碼,這意味着將相關的內容封裝在一起。順便說一句,這就是面向對象設計的整個前提。

+0

I認爲你不能比較這一點。全局變量是一個範圍問題,而不是封裝問題。 這個問題涉及性能。面向對象的設計不是時間關鍵型應用程序的首選:-),結構是面向對象設計的前身,因此是一個問題。 – Code

+0

我回答了性能問題。您還沒有提出一個令人信服的論點,說明爲什麼封裝或範圍會影響性能。編譯器也不知道。 –