使用std::nth_element时,如果第n个迭代器不在[first,last)范围内怎么办

问题描述 投票:0回答:1

如果 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 代码中给我断言失败,说“向量迭代器范围转置”。这是一个未定义的行为吗?

c++ algorithm vector
1个回答
0
投票

是的,如果

,这是未定义的行为

[first, nth) 或 [nth, last) 不是 [有效范围][1]。

这说明

nth
需要位于
first
last
之间。 [1]:https://en.cppreference.com/w/cpp/iterator#Ranges

© www.soinside.com 2019 - 2024. All rights reserved.