【发布时间】:2012-08-01 02:16:33
【问题描述】:
我认为&*vector::end() 是未定义的行为...直到我看到some post 参考Stroustrup's code:
void vector_pointer_test(element_t* first, element_t* last, int number_of_times)
{
vector<element_t> container(first, last);
// &*container.begin() gets us a pointer to the first element
sort(&*container.begin(), &*container.end());
unique(&*container.begin(), &*container.end());
}
取消引用 end() 迭代器未定义行为,还是有效?
【问题讨论】:
-
如果Stroustrup做到了,怎么会出错?
-
@MarkRansom:这就是促使我问的原因,因为我真的认为这是(是?)错了......
-
我也这么认为,但我倾向于置身于语言律师辩论之外。看到答案会很有趣。我一直认为
end()迭代器是不可取消引用的。 -
在我看来完全错误。假设容器不是空的,那么
&*container.begin() + container.size()是正确的做法。 -
@Brangdon:jahhaj 不是也写得很清楚吗,“假设容器不是空的”?