如果 nth 超出范围 [first, last),我找不到与处理 std::nth_element(first, nth, last) 相关的任何官方定义。
为了弄清楚这一点,我在我的机器上做了一个玩具测试:
std::vector<int> arr{ 7, 3, 9, 6, 4 };
std::nth_element( arr.begin() + 1, arr.begin(), arr.end() );
for (int num : arr) {
printf("%d", num);
}
MSVC 在向量的 stl src 代码中给我断言失败,说“向量迭代器范围转置”。这是一个未定义的行为吗?
是的,如果
,这是未定义的行为[first, nth) 或 [nth, last) 不是 [有效范围][1]。
这说明
nth
需要位于 first
和 last
之间。
[1]:https://en.cppreference.com/w/cpp/iterator#Ranges