Acessando dados vetoriais brutos como um array de caracteres
Considere a necessidade de utilizar um std::vector como um array de caracteres dentro de uma função que espera um ponteiro vazio. Inicialmente, usar um array char regular era simples. No entanto, mudar para a flexibilidade de um std::vector apresenta um desafio no acesso a seus dados brutos.
Passando o ponteiro do vetor para uma função
As tentativas imediatas de passar o vetor, &something, ou seu iterador, &something.begin(), para a função, pois os ponteiros vazios não produziram os resultados desejados. Em vez disso, &something retorna o endereço do objeto std::vector, não os dados em si, enquanto &something.begin() fornece o endereço de um iterador, que não é permitido como um lvalue.
Addressing o elemento no índice 0
A solução está em recuperar o endereço do primeiro elemento do vetor. Isto pode ser conseguido através de vários métodos. Uma abordagem é usar &something[0], que fornece o endereço do elemento no índice 0. Outra opção é empregar &something.front(), que executa a mesma tarefa.
Data() Função em C 11
Para C 11 e posterior, uma função de membro conveniente chamada data() foi introduzida em std::vector. Esta função retorna diretamente o endereço do elemento inicial no contêiner. Sua vantagem está em ser seguro para uso mesmo quando o contêiner está vazio.
Conclusão
Para passar dados std::vector para uma função que aceita ponteiros void, ele é necessário recuperar o endereço do primeiro elemento do vetor. Isso pode ser feito usando &something[0], &something.front() ou a função data(), dependendo da versão C e do tamanho do contêiner.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3