2012-01-22 15 views
12

valarray classe di stesso per array classe sguardo, si può spiegare a me dove io preferirei valarray oltre array o viceversa?Qual è la differenza tra std :: valarray e std :: array di

+1

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

+1

Si tratta di 'valarray', non' vallaray'. Non sono affatto la stessa cosa, probabilmente non dovresti usare 'valarray' dato che è così mal concepito da renderlo inutile. La differenza tra 'array' e' vector' dovrebbe essere sufficiente. –

risposta

16
  • valarray era già in C++ 03, array è nuovo in C++ 11
  • valarray è di lunghezza variabile, array non è.
  • valarray è stato progettato per i calcoli numerici e fornisce un sacco di operazioni tra cui +, -, *, cos, sin, ecc ... array non lo fa.
  • valarray ha un'interfaccia per recuperare le sezioni dell'array (sotto array), array no.
+0

mentre tutte le risposte sono buone e ognuna ha qualcosa in più non sapevo quale accettare. quindi grazie a tutti voi !. – codekiddy

+0

Consentitemi di aggiungere un paio di collegamenti su 'array' e' array' contro 'vector' http://en.cppreference.com/w/cpp/container/array e http://stackoverflow.com/questions/15079057/array-vs-vettori-introduttivo-somiglianze-e-differenze –

4

valarray è una struttura dati dinamica, le cui dimensioni possono cambiare in fase di esecuzione e che esegue l'allocazione dinamica. array è una struttura di dati statici la cui dimensione è determinata al momento della compilazione (ed è anche un aggregato).

Non utilizzare valarray, tuttavia; basta usare invece vector.

+3

perché è preferibile il vettore? – DilithiumMatrix

+1

@zhermes: hm, forse [controllare questa domanda] (http://stackoverflow.com/questions/1602451/c-valarray-vs-vector) per alcune informazioni di base. Essenzialmente, gli algoritmi standard e 'vector' ti danno tutto ciò di cui hai bisogno. –

5

I modelli di classe relativi a std::valarray<T> sono destinati a supportare le tecniche di ottimizzazione note come modelli di espressione . Non ho provato a farlo, ma la mia comprensione è che le specifiche non richiedono questo e inoltre non supportano questo a sufficienza. In generale, std::valarray<T> è una classe abbastanza specializzata e non è molto utilizzata. Inoltre, ritengo che gli argomenti del modello supportati per std::valarray<T> siano un set limitato (ad esempio i tipi numerici incorporati).

Sull'altro std::array<T, n> è una matrice di dimensioni fisse che supporta, per quanto possibile pur rimanendo di dimensioni fisse, la normale interfaccia contenitore. In sostanza, std::array<T> è un più comodo da usare versione di T[n].