2012-01-22 27 views
12

valarray class look es igual a array clase, ¿me puede explicar dónde preferiría valarray sobre o viceversa?¿Cuál es la diferencia entre std :: valarray y std :: array

+1

Ver http://stackoverflow.com/questions/1602451/c-valarray-vs-vector – Johnsyweb

+1

Es 'valarray', no' vallaray'. No son la misma cosa en absoluto, probablemente no deberías usar 'valarray' ya que es tan poco pensado como para inutilizarlo. La diferencia entre 'array' y' vector' debería ser suficiente. –

Respuesta

16
  • valarray ya estaba en C++ 03, array es nuevo en C++ 11
  • valarray es de longitud variable, array no lo es.
  • valarray está diseñada para cálculos numéricos y proporciona un montón de operaciones incluyendo +, -, *, cos, sin, etc ... array no.
  • valarray tiene una interfaz para recuperar rebanadas de la matriz (matrices sub), array no lo hace.
+0

mientras todas las respuestas son buenas y cada una tiene algo más que yo no sabía que aceptar. así que gracias a todos ustedes !. – codekiddy

+0

Permitidme añadir un par de enlaces sobre '' array' y array' frente a 'vECTOR' http://en.cppreference.com/w/cpp/container/array y http://stackoverflow.com/questions/15079057/arrays-vs-vectores-introducción-similitudes-y-diferencias –

4

valarray es una estructura de datos dinámica, cuyo tamaño puede cambiar en el tiempo de ejecución y que realiza la asignación dinámica. array es una estructura de datos estáticos cuyo tamaño se determina en tiempo de compilación (y también es un agregado).

No utilice valarray, sin embargo; simplemente use un vector en su lugar.

+3

¿por qué es preferible el vector? – DilithiumMatrix

+1

@zhermes: hm, tal vez [comprobar esta pregunta] (http://stackoverflow.com/questions/1602451/c-valarray-vs-vector) para algunos antecedentes. Esencialmente, los algoritmos estándar y el 'vector' te brindan todo lo que necesitas. –

5

Las plantillas de clase relacionadas con std::valarray<T> están pensadas para admitir las técnicas de optimización conocidas como plantillas de expresión. No he intentado hacer esto, pero tengo entendido que la especificación no lo requiere del todo y tampoco realmente lo admite suficientemente. En general, std::valarray<T> es una clase bastante especializada y no se usa ampliamente. Además, creo que el soporte de argumentos de la plantilla para std::valarray<T> es un conjunto limitado (por ejemplo, los tipos incorporados numéricos).

Por otro std::array<T, n> es una matriz de tamaño fijo de apoyo, en la medida de lo posible el tamaño mientras que se fija, la interfaz de contenedor normal. Básicamente, std::array<T> es una versión más conveniente de usar de T[n].

Cuestiones relacionadas