【发布时间】:2020-06-24 10:24:07
【问题描述】:
以下是从多映射中获取数据并分配给 typedef 结构的示例代码。我需要知道与单个 for 循环相比,使用多个 for 循环获取数据是否存在任何性能差异/优势/劣势。这里 dbR25GetRoute 是多图。
int sz = dbR25GetRoute.size();
int indivi = sz/28;
if(!pGetRoute && (0 < indivi)) {
pGetRoute = new R25GetRoute[indivi];
}
if(pGetRoute) {
typename DBMULTIMAP::const_iterator iter = dbR25GetRoute.begin();
for (int cnt = 0; (iter != dbR25GetRoute.end()) && (cnt < indivi); iter++, cnt++) {
pGetRoute[cnt].costPrice = GetDBVal<double>(iter->second);
}
for (int cnt = 0; (iter != dbR25GetRoute.end()) && (cnt < indivi); iter++, cnt++) {
pGetRoute[cnt].access = GetDBVal<std::string>(iter->second);
}
..... total 28 for loops
}
而不是单循环
if(pGetRoute) {
typename DBMULTIMAP::const_iterator iter = dbR25GetRoute.begin();
for (int cnt = 0; (iter != dbR25GetRoute.end()); iter++, cnt++) {
T data = GetDBVal<double>(iter->second);
/// Call some functionality here to save T data
}
我想使用多选项方案,因为它适合我的编码方案。但是需要知道它是否有与之相关的缺点。
【问题讨论】:
-
您尝试过并且遇到过任何性能问题吗?
-
实际上没有,但我需要知道,因为我从同事那里得到了一条评论,说多个 for 循环更昂贵且耗时。我需要知道这背后的真相。
-
至少多个 for 循环是需要维护和理解的额外代码。如果您尝试修改多个循环逻辑,您将需要在多个地方进行更改,这样的代码很容易出错。
-
好的,同意这一点,但是关于与任何输入相关的性能?
-
我没有多次迭代容器。迭代器只从头开始一次。所以 N 对于这两种情况仍然是相同的。
标签: c++ performance memory data-structures compilation