He asignado un gran vector doble, digamos con 100000 elementos. En algún punto de mi código, quiero configurar todos los elementos en un valor constante distinto de cero. ¿Cómo puedo hacer esto sin usar un bucle for para todos los elementos? También estoy usando el paquete blas, si esto ayuda.Initialize double array con valores distintos de cero (blas)
Respuesta
Usted podría utilizar std::fill
(#include <algorithm>
):
std::fill(v.begin(), v.end(), 1);
Esto es esencialmente también a sólo un bucle por supuesto ..
Siempre se utiliza memset()
si no desea bucle.
Esto es, memset(myarr, 5, arrsize);
para completarlo con los 5's. Tenga cuidado con la conversión implícita a char sin signo.
SINOPSIS
#include <string.h> void * memset(void *b, int c, size_t len);
DESCRIPCIÓN
The memset() function writes len bytes of value c (converted to an unsigned char) to the byte string b.
Y si el vector es grande, y lo necesita para ir rápido y se está utilizando gcc, entonces:
Generación de código de movimiento de bloque (memcpy) y conjunto de bloques (memset) fue reescrito. GCC ahora puede elegir el mejor algoritmo (bucle, bucle desenrollado, instrucción con prefijo de rep o una llamada de biblioteca) basado en el tamaño del bloque que se está copiando y para el que está optimizada la CPU.
-1: Tiene un vector doble y memset para un vector doble (puedo entender que es una matriz contigua debajo del vector), cuando específicamente quiere que sea un valor distinto de cero no es trivial. El valor que se puede establecer a través de memset es un byte (tamaño de char sin signo), mientras que la constante que quiere establecer es 4 bytes –
Se perdió el vector doble mientras se leía. Si necesita todos los 4 bytes llenos, entonces sí, esto no funcionará. Por otro lado, probablemente quiera marcarlos como "no utilizados" y un byte puede hacer el truco. – Milan
No veo el OP mencionar eso sin embargo. Pero para ser preciso con su pregunta, creo que std :: fill es su mejor opción. –
'fill' es lo que has dicho.
tener en cuenta que también es posible construir un vector lleno de un valor especificado:
std::vector<double> vec(100000, 3.14);
Así que si "en algún momento" significa "inmediatamente después de la construcción", hacen de este lugar. Además, significa que usted puede hacer esto:
std::vector<double>(100000, 3.14).swap(vec);
que podría ser útil si "en algún momento" significa "inmediatamente después de cambiar el tamaño", y que espera/quieren que el vector se puede reasignar ("espera" si lo está haciendo más grande que su capacidad anterior, "quiere" si lo está haciendo mucho más pequeño y lo quiere recortar para ahorrar memoria).
- 1. C - initialize array of structs
- 2. Seleccionar valores distintos con odata
- 3. Initialize array en la lista de inicialización del constructor
- 4. ¿Es la memoria de relleno con valores distintos de cero más lenta que llenarla de ceros?
- 5. Contar valores distintos
- 6. VBA valores por defecto la variable/array
- 7. LINQ: valores distintos
- 8. Looping sobre distintos valores
- 9. obtener valores distintos con Ordenada datos
- 10. Teclas Sparql contra valores distintos
- 11. double double vs double
- 12. Obtener nombres de elementos de enumeraciones con valores cero múltiples
- 13. ¿Hay una función de "cuadro delimitador" (división con valores distintos de cero) para un ndarray en NumPy?
- 14. ¿Cómo seleccionar valores de campo distintos con Solr?
- 15. seleccione y vuelva a seleccionar valores distintos
- 16. Lectura valores distintos de XML usando XPath
- 17. MySQL: Cuente las ocurrencias de valores distintos
- 18. Django y Agregado: ¿Suma de valores distintos?
- 19. ¿Cómo obtener valores distintos de una matriz en C#?
- 20. Diferencia entre default-initialize e value-initialize?
- 21. índice en la columna con sólo 2 valores distintos
- 22. Cómo recuperar valores distintos con arel/álgebra relacional
- 23. git initialize remote repo
- 24. R: Reemplazar valores negativos por cero
- 25. consultas linq anidadas, ¿cómo obtener valores distintos?
- 26. ¿Cómo implementar IEqualityComparer para devolver valores distintos?
- 27. ¿Cómo recuperar valores distintos en Core Data?
- 28. consultas MongoDB para distintos valores ordenados
- 29. ¿Cómo consulto distintos valores en Mongoose?
- 30. LINQ Obtenga valores distintos y complete LIST
Excepto que ** puede ** optimizarse para algunos tipos particulares y categorías de iteradores (incluso si es poco probable). –
Recomendaría este método también. –