Ho assegnato un grande vettore doppio, diciamo con 100000 elementi. Ad un certo punto nel mio codice, voglio impostare tutti gli elementi su un valore costante, diverso da zero. Come posso farlo senza usare un ciclo for su tutti gli elementi? Sto anche usando il pacchetto blas, se aiuta.Inizializza doppio array con valori diversi da zero (blas)
risposta
Potreste usare std::fill
(#include <algorithm>
):
std::fill(v.begin(), v.end(), 1);
Questo è essenzialmente anche solo un anello, naturalmente ..
Si utilizza sempre memset()
se non si vuole loop.
Cioè, memset(myarr, 5, arrsize);
per riempirlo con tutti i 5. Attenti alla conversione implicita in caratteri non firmati.
SINOSSI
#include <string.h> void * memset(void *b, int c, size_t len);
DESCRIZIONE
The memset() function writes len bytes of value c (converted to an unsigned char) to the byte string b.
E se il vettore è grande, e avete bisogno di andare veloce e si utilizza gcc, allora:
Generazione codice di spostamento blocco (memcpy) e il set di blocchi (memset) è stato riscritto. GCC può ora scegliere l'algoritmo migliore (loop, loop srotolato, istruzione con prefisso o una chiamata di libreria) basato su la dimensione del blocco da copiare e per la CPU ottimizzata per.
-1: Ha un vettore doppio e memset per un vettore doppio (posso capire che è un array contiguo al di sotto del vettore), quando specificamente vuole che sia un valore diverso da zero non è banale. Il valore che può essere impostato tramite memset è un byte (dimensione del carattere non firmato), mentre la costante che desidera impostare è 4 byte –
Manca il doppio vettore durante la lettura. Se ha bisogno di tutti i 4 byte pieni, allora sì, questo non funzionerà. Dall'altro lato, probabilmente vorrebbe contrassegnarli come "non usati" e un byte può fare il trucco. – Milan
Tuttavia non vedo l'OP che lo menziona. Ma per essere precisi con la sua domanda, credo che std :: fill sia la sua scelta migliore. –
"riempimento" è giusto da quello che hai detto.
essere consapevoli del fatto che è anche possibile costruire un vettore pieno di un valore specificato:
std::vector<double> vec(100000, 3.14);
Quindi, se "a un certo punto" significa "subito dopo la costruzione", fare questo, invece. Inoltre, significa che si può fare questo:
std::vector<double>(100000, 3.14).swap(vec);
che potrebbe essere utile se "ad un certo punto" significa "immediatamente dopo la modifica della dimensione", e ci si aspetta/vuole il vettore per essere riallocato ("prevedere" se lo stai rendendo più grande della sua precedente capacità, "vuoi" se lo stai rendendo molto più piccolo e vuoi che venga tagliato per risparmiare memoria).
- 1. Numpy sum lunghezza di corsa di valori diversi da zero
- 2. Media dei valori diversi da zero nella matrice sparsa?
- 3. VBA: Inizializza oggetto con valori?
- 4. Esiste una funzione "bounding box" (sezione con valori diversi da zero) per un narray in NumPy?
- 5. C#: inizializza un array DateTime
- 6. Inizializza i valori dell'array in una struct
- 7. Inizializza array nell'elenco di inizializzazione del costruttore
- 8. Escludere valori zero da un bargetto ggplot?
- 9. FactoryGirl create_list con valori diversi
- 10. Struttura CUDA rilegata zero zero
- 11. Conversione C/C++ da doppio a punto fisso con numero minimo di cifre diverse da zero
- 12. Quando si inizializza un array di caratteri, lo spazio rimanente è zero o non inizializzato?
- 13. Inizializza tuple con valori vuoti o nulli in C#
- 14. Come rimuovere valori zero da una matrice in parallelo
- 15. Zero pad numpy array
- 16. Come testare se un doppio è zero?
- 17. conteggio di elementi diversi da zero all'interno di ciascuna riga e all'interno di ciascuna colonna di un array numpy 2D
- 18. gcc inizializza automaticamente le variabili statiche a zero?
- 19. Inizializza NSArray con dimensione
- 20. Limita un doppio a due decimali senza zero finale
- 21. Ottenere i nomi degli oggetti dall'enumerazione con più valori zero
- 22. Inizializza array generico Java di tipo
- 23. Inizializza le preferenze da XML nell'attività principale
- 24. La memoria locale thread-thread inizializza i valori?
- 25. Ordinamento array con valori nulli
- 26. Archiviazione di diversi tipi di valori in Array in Swift
- 27. BLAS e CUBLAS
- 28. Numpy, BLAS e CUBLAS
- 29. array sorta di doppio in C
- 30. TCompressionStream inizializza con dati
Tranne che ** può ** essere ottimizzato per alcuni tipi particolari e categorie iteratore (anche se è improbabile). –
Raccomando anche questo metodo. –