我处理了很多计算代码,这些代码是使用高性能和低内存开销为目标编写的c++。它大量使用STL容器(主要是std::vector
),并在几乎每个函数中迭代这些容器。
迭代的代码看起来像这样:
for (int i = 0; i < things.size(); ++i)
{
// ...
}
但是它产生了有符号/无符号不匹配警告(在Visual Studio中为C4018)。
将int
替换为某个unsigned
类型是一个问题,因为我们经常使用OpenMP
指令,而且计数器必须为int
。
我将要抑制(hundreds of)这些警告,但我担心我可能错过了一些优雅的解决方案。
关于迭代器。我认为迭代器在适当的地方应用会很好。我正在处理的代码将永远不会将随机访问容器转换成std::list
或其他容器(因此使用int i
进行迭代已经与容器无关),并且将始终需要当前索引。而且所有额外需要输入的代码(迭代器本身和索引)只会使问题更加复杂和混淆底层代码的简洁性。
int
。 - Billy ONeal