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

Foi útil?

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;
  }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top