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.