Pergunta

Eu tenho um vetor de MyObjects no escopo global.

std::vector<myObject>

Um método é passado um ponteiro para um dos elementos do vetor. Este método pode incrementar o ponteiro, para chegar ao próximo elemento,

myObject* pmObj;

++pmObj; // the next element ??

ou deveria ser passado um std::Vector<myObject>::iterator e incremento isso em vez disso?

Suponha que, por enquanto, que o vetor não seja alterado nesse meio tempo.

Foi útil?

Solução

Sim - as garantias padrão em uma correção técnica de que o armazenamento para um vetor é contíguo; portanto, incrementar os ponteiros em um vetor funcionarão.

Outras dicas

Sim, isso funcionará como esperado desde std::vector é mandatado para usar o armazenamento contíguo pelo padrão. Eu sugeriria passar em um par de iteradores se você estiver trabalhando com uma variedade de objetos. Este é praticamente o idioma padrão, conforme empregado pelo STL. Isso tornará seu código um pouco mais seguro, pois você tem um terminal explícito para iteração em vez de confiar em uma contagem ou algo assim.

Se o vetor não for realocado e você certamente não sair dos limites do vetor, poderá usar essa abordagem. Incrementar os ponteiros é legal e, embora você tenha espaço para passar para o próximo elemento, você pode fazê -lo incrementando o ponteiro, pois o buffer do vetor é um único bloco de memória.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top