Usando um iterador STD :: String para encontrar o início e o fim da sua corda
Pergunta
Dado apenas um iterador STD :: String, é possível determinar os pontos de partida e final da string? Supondo que eu não tenho acesso ao objeto String e, portanto, não posso chamar String.Begin () e String.end (), e tudo o que posso fazer é incrementar ou diminuir o iterador e testar o valor.
Obrigado, Phil
Solução
A resposta curta é não. A resposta longa é que não se espera que os iteradores saibam sobre os contêineres ou faixas que estão iterando, eles só devem
- Ser capaz de pular para o próximo elemento (Inc ou DEC para a próxima ou prev)
- Desreferenciar -se para revelar uma referência ao valor que eles estão apontando para
- E, durante todo o curso, se compara com outros iteradores, o mais importante é um iterador "final" de algum tipo.
Além disso, certos tipos iteradores podem fazer mais do que apenas o acima, mas principalmente eles são necessários para ter/executar o acima de uma forma ou outra.
Outras dicas
- Para o ponto final da string: suponha que a sequência de caracteres interna seja terminada nula. Então, através da desreferência do iterador, para ver se eles estão ' 0' para determinar a próxima posição é o ponto final. Mas para outras cordas não terminadas em nulo, é impossível conhecer essas informações.
- Para o ponto de partida da string: nenhuma maneira de fazer isso.
O padrão padrão :: String :: Iterator é apenas um iterador aleatório de duas direção, não sabe nada sobre contêiner.
Mas se você estiver trabalhando na plataforma Visual C ++, talvez possa usar alguma maneira de seguir para seguir o controle de seu contêiner, mas é muito perigoso:
// it is the passed in string::iterator parameter.
if (it._Has_container()) {
string* strRef = (string*)it._Mycont;
}