biblioteca array c++ c++11 stdarray

c++ - biblioteca - std:: array vs array performance



c++ 11 array (4)

¿Cuáles son las ventajas de usar std::array sobre los habituales?

Tiene una semántica de valores amigables, de modo que puede ser transferido o devuelto desde funciones por valor. Su interfaz lo hace más conveniente para encontrar el tamaño y usarlo con algoritmos basados ​​en iteradores de estilo STL.

¿Es más performante?

Debería ser exactamente el mismo. Por definición, es un agregado simple que contiene una matriz como su único miembro.

¿Es más fácil de manejar para copiar / acceder?

Sí.

Si quiero construir una matriz muy simple como

int myArray[3] = {1,2,3};

¿Debo usar std::array lugar?

std::array<int, 3> a = {{1, 2, 3}};

¿Cuáles son las ventajas de usar std :: array sobre los habituales? ¿Es más performante? ¿Es más fácil de manejar para copiar / acceder?


Un std::array es una envoltura muy delgada alrededor de un array de estilo C, básicamente definido como

template<typename T, size_t N> class array { public: T _data[N]; T& operator[](size_t); const T& operator[](size_t) const; // other member functions and typedefs };

Es un aggregate , y le permite usarlo casi como un tipo fundamental (es decir, puede pasar por valor, asignar, etc., mientras que una matriz C estándar no se puede asignar o copiar directamente a otra matriz). Debería echar un vistazo a alguna implementación estándar (saltar a la definición de su IDE favorito o abrir directamente <array> ), es una parte de la biblioteca estándar de C ++ que es bastante fácil de leer y entender.


std::array está diseñado como un envoltorio de cero sobrecarga para las matrices C que le da el valor "normal" como la semántica de los otros contenedores C ++.

No debe notar ninguna diferencia en el rendimiento en tiempo de ejecución mientras aún pueda disfrutar de las funciones adicionales.

Usar std::array lugar de int[] es una buena idea si tiene C ++ 11 o boost a la mano.


std::array tiene una semántica de valor, mientras que las matrices en bruto no. Esto significa que puede copiar std::array y tratarlo como un valor primitivo. Puede recibirlos por valor o por referencia como argumentos de función y puede devolverlos por valor.

Si nunca copia un std::array , entonces no hay diferencia de rendimiento que un array en bruto. Si necesita hacer copias, entonces std::array hará lo correcto y aún así debería proporcionar el mismo rendimiento.