¿Hay alguna manera segura y estándar de tratar una matriz de estilo C como una matriz std :: sin copiar los datos en una nueva matriz std ::?Tratar C cstyle array como std :: array
Esto claramente no se compila, pero es el efecto que me gustaría (mi uso real es más complicado pero esta muestra corta debería mostrar lo que me gustaría hacer). Supongo que un reinterpret_cast "funcionará" pero probablemente no es seguro.
#include <array>
int main()
{
int data[] = {1, 2, 3, 4, 5};
// This next line is the important one, treating an existing array as a std::array
std::array<int, 5>& a = data;
}
Parece que debería ser posible ya que los datos deben almacenarse de manera idéntica.
edit: Para ser claros No quiero borrar una nueva std :: array, quiero referirme a los datos existentes como uno solo.
contenedores STL gestionar su propia memoria. No puede crear una matriz y hacer que administre una matriz que haya asignado a otra parte. – krammer
Dado que 'std :: array' y' std :: vector' esperan administrar su propia memoria, debe tener mucho cuidado al usar 'reinterpret_cast' sin tomar medidas para asegurar que no intenten eliminar datos que no sean bajo su control. Pero aparte de eso ... no tengas miedo de 'memcpy'. Es una rutina bastante eficiente, después de todo. – Rook
Ok gracias. Quiero hacer esto de forma segura, no hacer un truco, solo me preguntaba si era posible es todo :) – jcoder