É possível inicializar std :: vector sobre a memória já alocada?
Minha pergunta é bastante simples e estou surpreso por não encontrar nada relacionado. Provavelmente é fácil ou totalmente estúpido (ou não consigo pesquisar).
Como o título diz, é possível usarstd::vector
na memória já alocada, portanto, não aloca novos elementos desde o início, mas usa o que é fornecido. Eu imaginaria isso como algo como:
T1 *buffer = new T1[some_size];
std::vector<T2> v(buffer, some_size); // <- ofc doesn't work
O oposto é bastante simples e (talvez não seja bonito, mas) funciona:
std::vector<T2> v(some_size);
T1 *buffer = &v[0];
O armazenamento é garantido para ser contínuo, por isso é tão seguro quanto um iterador.
Minha motivação é bastante simples. Eu passo alguns dados de memória bruta, ou seja, bytes, e como conheço a interpretação deles em outros lugares, gostaria de convertê-los em algo significativo. Eu poderia fazer umreinterpret_cast
e use uma matriz normal de estilo c, mas eu prefiro instalações c ++.
Tenho a sensação de que isso deve ser seguro, uma vez que abandonamos a propriedade debuffer
para vetor, porque ele precisa ser realocado.