Estou tentando usar std::vector
como uma char
matriz.
Minha função recebe um ponteiro nulo:
void process_data(const void *data);
Antes eu simplesmente usava esse código:
char something[] = "my data here";
process_data(something);
O que funcionou como esperado.
Mas agora eu preciso da dinâmica de std::vector
, então tentei este código:
vector<char> something;
*cut*
process_data(something);
A questão é: como passo o vetor char para a minha função para que eu possa acessar os dados brutos do vetor (independentemente do formato) - flutua etc.)?
Eu tentei isso:
process_data(&something);
E isto:
process_data(&something.begin());
Mas ele retornou um ponteiro para dados jargão, eo último deu o aviso: warning C4238: nonstandard extension used : class rvalue used as lvalue
.
vector<bool>
que é a exceção a esta resposta (e não possui um armazenamento contíguo debool
s).std::vector<bool>
porquestd::vector<bool>
requer o uso de um objeto proxy e esse proxy não pode ser implicitamente convertido em abool*
. Como solução alternativa para isso, se você precisar de uma sequência debool
, é melhor usar apenas astd::vector<char>
. @Motti.data()
- I'lll apenas fingir que não vê que feio&*iterator
: Pdata()
live? Se o vetor nunca for redimensionado, seja maior ou menor (viapush_back()
ou outras funções, inclusivereserve
), é garantido que o ponteiro permanecerá enquanto o vetor permanecer, apontando para o local correto?something.data()
retornará um ponteiro para o espaço de dados do vetor.fonte
error C2039: 'data' : is not a member of 'std::vector<_Ty>'
vector::data()
é novo no C ++ 11Pegue um ponteiro para o primeiro elemento:
fonte