迭代 std::vector:有符号索引变量与无符号索引变量
在 C 中迭代向量时,可以使用有符号索引变量或无符号索引变量。但是,需要注意一些细微的差异。
通常首选使用无符号索引变量,因为它消除了负索引的可能性,而负索引会导致未定义的行为。例如,此代码工作正常:
for (unsigned i = 0; i < polygon.size(); i++) { sum += polygon[i]; }
但是,此代码会生成警告:
for (int i = 0; i < polygon.size(); i++) { sum += polygon[i]; }
发生警告是因为比较 i
Polygon.size() 介于有符号和无符号整数表达式之间。在某些情况下,这可能会导致意外的行为。因此,在迭代向量时最好始终使用无符号索引变量。您可能也更喜欢使用迭代器而不是索引。迭代器提供了一种访问向量元素的更抽象的方式,它们可以帮助防止您犯错误。例如,您可以使用以下代码来迭代向量:for (std::vector<int>::iterator it = polygon.begin(); it != polygon.end(); ++it) { sum += *it; }
以上是迭代 std::vector 时应该使用有符号还是无符号索引变量?的详细内容。更多信息请关注PHP中文网其他相关文章!