指向数组空元素的迭代器
Iterator pointing to empty element of array
我只是想知道是否在一个有元素但元素不全的数组中,例如:
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();
提前致谢。
解决方案 1:
用std::numeric_limits::max()
填充数组中的所有元素
方案二:
如果您不知道数组的大小,请使用动态大小的容器 => 向量:
std::vector<int> foo;
foo.push_back(4);
foo.push_back(2);
foo.push_back(3);
int min_loc = std::distance(std::begin(v), std::min_element(std::begin(v), std::end(v)));
我只是想知道是否在一个有元素但元素不全的数组中,例如:
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();
提前致谢。
解决方案 1:
用std::numeric_limits::max()
填充数组中的所有元素方案二:
如果您不知道数组的大小,请使用动态大小的容器 => 向量:
std::vector<int> foo;
foo.push_back(4);
foo.push_back(2);
foo.push_back(3);
int min_loc = std::distance(std::begin(v), std::min_element(std::begin(v), std::end(v)));