2017-06-05 63 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

我回答了性能问题。您还没有提出一个令人信服的论点,说明为什么封装或范围会影响性能。编译器也不知道。 –