例如:
vector<int> something;
//imagine i add some elements to the vector here
int* pointy;
for (int i = 0; i < something.size(); pointy = &something[i++]) {
//do some work with pointy
}
它似乎有效并为我省了线,但是是否有任何奇怪的错误会因此而突然出现的危险?
最佳答案
这可能不合法,因为 pointy
在第一次迭代时未分配。如果循环在初始迭代期间没有取消引用 pointy
,则可能没问题,但如果不看循环体就无法判断。
由于您使用的是 std::vector
,使用迭代器将为您节省另一行,因为您不需要声明 pointy
。您可以通过从当前迭代器中减去 something.begin()
来确定没有 i
的偏移量:
for (vector<int>::iterator iter = something.begin() ; iter != something.end() ; ++iter) {
cout << "Item at index " << (iter - something.begin()) << " is " << *iter << endl;
}
关于c++ - 这是 for 循环的合法使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16882506/