为了提高应用程序的性能,我们必须在开发阶段考虑循环优化技术。
我想向您展示一些迭代简单的不同方法std::vector<uint32_t> v
:
带索引的未优化循环:
uint64_t sum = 0; for (unsigned int i = 0; i < v.size(); i++) sum += v[i];
带有迭代器的未优化循环:
uint64_t sum = 0; std::vector<uint32_t>::const_iterator it; for (it = v.begin(); it != v.end(); it++) sum += *it;
缓存
std::vector::end
迭代器:uint64_t sum = 0; std::vector<uint32_t>::const_iterator it, end(v.end()); for (it = v.begin(); it != end; it++) sum += *it;
预增量迭代器:
uint64_t sum = 0; std::vector<uint32_t>::const_iterator it, end(v.end()); for (it = v.begin(); it != end; ++it) sum += *it;
基于范围的循环:
uint64_t sum = 0; for (auto const &x : v) sum += x;
还有其他方法可以在 C++ 中构建循环;例如通过使用std::for_each
,BOOST_FOREACH
等...
在您看来,提高性能的最佳方法是什么?为什么?
此外,在性能关键的应用程序中,展开循环可能很有用:同样,您会建议哪种方法?