for (int i = 0; i < level.PathLookupVectors()[globalNodePositionIndex][globalNodeChoice].size(); i++)
{
//adds the correct nodes to the search
search.push_back(level.PathLookupVectors()[globalNodePositionIndex][globalNodeChoice][i]);
}
这是一个64位系统。
程序大约需要30秒才能执行循环的一次传递。有没有理由发生这种情况?我不确定你们需要什么信息,但是我会问你,我会帮你的。
搜索是整数向量,pathLookupVectors是向量向量向量的向量。
搜索通常最终会被平均27个整数填充,但可能会高一个或低到一个。
我注意到我按值传递pathLookupVectors。这可能是问题吗?
答案 0 :(得分:4)
如果没有看到所有相关代码,很难说,但我怀疑:
level.PathLookupVectors()
...可能返回某种类型的vector
按值,而不是按指针或按引用。这只是一个猜测,但如果是这样,你可以创建整个向量的临时副本,然后修改它。
答案 1 :(得分:2)
尝试:
correct_type &cache = level.PathLookupVectors()[globalNodePositionIndex][globalNodeChoice];
for (unsigned int i = 0, size = cache.size(); i < size; i++)
{
//adds the correct nodes to the search
search.push_back(cache[i]);
}
这是为了避免多次重新计算level.PathLookupVectors()[globalNodePositionIndex][globalNodeChoice]
。
答案 2 :(得分:0)
此语句在每次迭代时执行两次。在for-statement的条件下:
level.PathLookupVectors()[globalNodePositionIndex][globalNodeChoice].size()
在for-statement的正文中:
search.push_back(level.PathLookupVectors()[globalNodePositionIndex][globalNodeChoice][i]);
那不是NO!
编辑:这完全没必要,因为:
level.PathLookupVectors()[globalNodePositionIndex][globalNodeChoice]
永远不会改变。你应该做的是将它分配给一个变量,并使用for循环中的变量而不是每次都计算它。
答案 3 :(得分:0)
可能是因为search
很大而且你一遍又一遍地分配一个大的向量。在分配之前尝试使用std::vector::reserve
。
如果真的那么大,你可能不应该使用矢量来构建它。使用其他数据结构构建它,然后将其复制回矢量。
如果您在构建时需要建立索引,请使用std::deque
。如果不这样做,那么只需使用std::list
。