我使用大量用C ++编写的计算代码,同时考虑了高性能和低内存开销。它大量使用STL容器(大部分是vector
),并且几乎在每个函数中都对该容器进行迭代。
迭代代码如下所示:
for (int i = 0; i < things.size(); ++i)
{
// ...
}
但它会产生有符号/无符号不匹配警告(在Visual Studio中为C4018)。
int
用某种unsigned
类型替换是一个问题,因为我们经常使用OpenMP编译指示,并且要求计数器为int
。
我将禁止显示(数百个)警告,但是恐怕我错过了一些优雅的解决方案。
关于迭代器。我认为,迭代器在适当的地方使用时很棒。我正在使用的代码将永远不会将随机访问容器更改为list
某种东西(因此进行迭代int i
已经与容器无关),并且将始终需要当前索引。而且,您需要键入的所有其他代码(迭代器本身和索引)只会使事情变得复杂,并且混淆了底层代码的简单性。
int
。