我使用大量用 C + + 编写的计算代码工作,考虑到高性能和低内存开销。它经常使用 STL 容器(主要是 std::vector
) ,并且几乎在每个函数中迭代该容器。
迭代代码如下所示:
for (int i = 0; i < things.size(); ++i)
{
// ...
}
但是它会产生 有符号/无符号不匹配警告(Visual Studio 中的 C4018)。
用某种 unsigned
类型替换 int
是一个问题,因为我们经常使用 OpenMP
杂注,并且它要求计数器为 int
。
我即将去掉(数百个)警告,但恐怕我错过了一些解决问题的优雅方案。
关于迭代器。我认为迭代器在适当的地方应用是非常好的。我正在处理的代码将 永远不会将随机访问容器更改为 std::list
或其他内容(因此使用 int i
迭代已经是不可知的容器) ,并且 一直都是将需要当前索引。您需要键入的所有附加代码(迭代器本身和索引)只会使问题复杂化,并使底层代码的简单性变得模糊。