在C++中迭代向量的正确方法是什么?
考虑这两个代码片段,这个工作正常:
for (unsigned i=0; i < polygon.size(); i++) {
sum += polygon[i];
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
for (int i=0; i < polygon.size(); i++) {
sum += polygon[i];
}
Run Code Online (Sandbox Code Playgroud)
产生warning: comparison between signed and unsigned integer expressions.
我是C++世界的新手,所以unsigned变量对我来说有点可怕,我知道unsigned如果使用不正确,变量会很危险,所以 - 这是正确的吗?
请使用以下两行代码:
for (int i = 0; i < some_vector.size(); i++)
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
for (some_iterator = some_vector.begin(); some_iterator != some_vector.end();
some_iterator++)
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
我被告知第二种方式是首选.这究竟是为什么?
在C++ 11中,您可以使用基于范围的语言for,它可以充当foreach其他语言.它甚至适用于普通的C数组:
int numbers[] = { 1, 2, 3, 4, 5 };
for (int& n : numbers) {
n *= 2;
}
Run Code Online (Sandbox Code Playgroud)
怎么知道什么时候停止?它是否仅适用于已在相同范围内声明的静态数组for?你会如何for在动态数组中使用它?
这样做是否有任何反指示?或者是否明确规定了行为?
#pragma omp parallel for
for(auto x : stl_container)
{
...
}
Run Code Online (Sandbox Code Playgroud)
因为看起来OpenMP规范只对c ++ 98有效,但我想由于C++ 11线程可能存在更多的不兼容性,这里没有使用它们.我还是想确定一下.