【发布时间】:2018-08-02 07:42:45
【问题描述】:
我只是想知道是否在一个有元素但没有充满元素的数组中,例如:
std::array<int, 5> foo;
foo[0] = 4;
foo[1] = 2;
foo[2] = 3;
foo.end() 会仍然指向最后一个元素 + 1 还是会指向 foo[3] 处的值?
我的上下文是我试图找到一个数组的最小值位置,该数组有时只分配了所有元素。部分示例代码如下:
int min_loc = std::min_element(foo.begin(), foo.end()) - foo.begin();
这会提取 min_loc = 1 吗?或者它会在数组中未定义的元素处找到 0 并将其分配为最小位置?
如果是这样,我应该将上面的行定义为:
int min_loc = std::min_element(foo.begin(), foo.end() - 2) - foo.begin();
提前致谢。
【问题讨论】:
-
foo中没有漏洞。您尚未分配的元素仍然存在,它们只是未初始化,包含随机垃圾。foo.end()仍然指向foo[4]过去一格。您的第一个std::min_element调用通过访问未初始化的对象表现出未定义的行为。 -
好的,非常感谢!