Não consigo encontrar nenhuma definição oficial relacionada ao tratamento de std::nth_element(first, nth, last) se nth estiver fora do intervalo [first, last).
Para tentar descobrir, fiz um teste de brinquedo na minha máquina:
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);
}
O MSVC me dá falha de asserção no código stl src do vetor, dizendo "intervalo do iterador do vetor transposto". É um comportamento indefinido?
Sim, é um comportamento indefinido se
O que diz que tanto quanto
nth
precisa estar entrefirst
elast
.