我有一些数据容器,并考虑将它们放入结构中(更容易将其提供给函数等)。 该计划应尽可能快。对结构中容器的访问是否更慢或完全相同?
// 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;
答案 0 :(得分:2)
这只是另一个“如果我使用全局变量,我的程序会运行得更快吗?”的问题。幸运的是,与大约20多年前的情况不同,答案现在是响亮的 没有 !
使用现代优化编译器,生成的代码几乎完全相同。在最差,您将有一个指针取消引用来访问字段,这不会在性能上产生可检测的差异。
因此,您应该编写可读且可维护的代码,这意味着将相关内容封装在一起。顺便说一下,这是面向对象设计的整个前提。