我使用大量编写的计算代码c++ /questions/tagged/c%2b%2b考虑到高性能和低内存开销。它使用STL容器(主要是std::vector
)很多,并且几乎在每个函数中迭代该容器。
迭代代码如下所示:
for (int i = 0; i < things.size(); ++i)
{
// ...
}
但它产生的有符号/无符号不匹配警告 (Visual Studio 中的 C4018).
更换int
和一些unsigned
类型是一个问题,因为我们经常使用OpenMP
杂注,并且它要求计数器是int
.
我即将取消(数百个)警告,但恐怕我错过了一些解决该问题的优雅解决方案。
关于迭代器。我认为迭代器应用在适当的地方是很棒的。我正在使用的代码将never将随机访问容器更改为std::list
或其他东西(所以迭代int i
已经与容器无关),并且将会always需要当前索引。您需要输入的所有附加代码(迭代器本身和索引)只会使事情变得复杂并混淆底层代码的简单性。
这一切都在你的things.size()
类型。它不是int
, but size_t
(它存在于 C++ 中,而不是 C 中),它等于某种“通常的”无符号类型,即unsigned int
对于 x86_32。
运算符“less”(
像这样写是正确的
for (size_t i = 0; i < things.size(); ++i) { /**/ }
甚至更快
for (size_t i = 0, ilen = things.size(); i < ilen; ++i) { /**/ }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)