在C ++中迭代向量的正确方法是什么?
考虑以下两个代码片段,这一段效果很好:
for (unsigned i=0; i < polygon.size(); i++) {
sum += polygon[i];
}
还有这个:
for (int i=0; i < polygon.size(); i++) {
sum += polygon[i];
}
产生warning: comparison between signed and unsigned integer expressions
。
我是C ++世界的新手,所以unsigned
变量对我来说有点吓人,我知道unsigned
如果使用不正确,变量可能很危险,所以-这是正确的吗?
对于向后迭代,请参见此答案。
向前迭代几乎是相同的。只需按增量更改迭代器/交换递减量即可。您应该更喜欢迭代器。有人告诉您将其std::size_t
用作索引变量类型。但是,这不是便携式的。始终使用size_type
容器的typedef(虽然在向前迭代的情况下只能进行一次转换,但是在使用时std::size_t
,如果向后迭代的情况下它可能会出错,以防万一std::size_t
大于typedef的情况size_type
) :
for(std::vector<T>::iterator it = v.begin(); it != v.end(); ++it) {
/* std::cout << *it; ... */
}
重要的是,对于您不知道其定义的迭代器,请始终使用前缀增量形式。这样可以确保您的代码尽可能通用。
for(auto const& value: a) {
/* std::cout << value; ... */
for(std::vector<int>::size_type i = 0; i != v.size(); i++) {
/* std::cout << v[i]; ... */
}
for(element_type* it = a; it != (a + (sizeof a / sizeof *a)); it++) {
/* std::cout << *it; ... */
}
for(auto const& value: a) {
/* std::cout << value; ... */
for(std::size_t i = 0; i != (sizeof a / sizeof *a); i++) {
/* std::cout << a[i]; ... */
}
但是,请阅读向后迭代的答案,该sizeof
方法可以解决什么问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句