Invalidação do iterador passado-a-fim em C ++ 11
O post mais popular em C ++Regras de invalidação do iterador afirma que não está claro se os iteradores passados (isto é, aqueles retornados porend()
, cend()
, rend()
ecrend()
) são invalidados de acordo com as mesmas regras dos iteradores normais, que apontam para elementos no contêiner. Estas reivindicações, feitas para 2003 e 2011 C + +, adiar para um post discutindoTerminar as regras de invalidação do iterador, onde a resposta aceita sugere que a norma de 2003 é ambígua sobre o assunto. Esta conclusão é baseada em um comentário em 23.1 / 10 (no contexto deswap()
) que parece implicar que quando a especificação não menciona explicitamente a invalidação de iteradores passados, eles podem ser invalidados.
Um comentário sobre a questão dessa postagem (por mike-seymour) sugere que C ++ 11 é inequívoca sobre este assunto, no caso dedeque
s. Minha pergunta é sobre todos os contêineres:
Dito de forma diferente
Posso confiar na validade de um iterador passado depois de executar uma operação de contêiner que não diz que pode invalidar os iteradores passados?