2012-06-21 1 views
5

ha un allineamento di memoria contiguo?Il valarray ha un allineamento di memoria contiguo?

Voglio passare un valarray a una funzione (da IPPS), che prende solo i puntatori, passando &myValarray[0]. Ma quindi dovrei essere sicuro che l'allineamento della memoria di valarray è contiguo.

Grazie!

+2

Qualcuno sta ancora utilizzando valarray? – Puppy

+1

@DeadMG Qual è l'alternativa? Desideri utilizzare i vettori che mantengono solo i valori e il loro utilizzo dovrebbe essere, se possibile, comodo come in Matlab. E i valarray sembrano soddisfare il mio bisogno (per il calcolo numerico). – Massoud

+0

@DeadMG Lo uso regolarmente. La sua interfaccia semplifica la scrittura di algoritmi generici che funzionano con scalari e vettori. E poiché fa parte dello standard, non devi fare affidamento su un'altra libreria. –

risposta

11

Supponendo che si sta chiedendo se la memoria gestita da un valarray è garantito per essere contigui, allora la risposta è sì, almeno se l'oggetto non è const (C++ 03, §26.3.2.3/3 o C++ 11, §26.6.2.4/2):

L'espressione & a [i + j] == & a [i] + j rimane vera per tutta size_t i e j tale size_t che i + j è inferiore alla lunghezza della matrice non costante a.

+0

Grazie a Coffin @Jerry, posso chiedere, perché il valarray non può essere costante per soddisfare questo requisito? – Massoud

+0

@Massoud: se la memoria serve, non puoi usare '&' su un elemento di 'const valarray' affatto. –

+0

@JerryCoffin: 'const T & operator [] (std :: size_t pos) const;' disponibile dal C++ 11. –