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