Tengo un problema que me gustaría fusionar una gran cantidad de imágenes con el convert.exe de ImageMagick, pero en Windows tengo un límite de línea de comandos de 8192 bytes.Cómo dividir un vector en n partes "casi iguales"
Mi solución a esto es dividir la tarea en una subtarea más pequeña, ejecutarlas y realizar una tarea final que las combine.
Mi idea es escribir una función, que toma un vector de imágenes y un número entero, y divide el vector en n sub-vector teniendo todas las partes "casi iguales".
Entonces, por ejemplo, si me gustaría dividir 11 en 3 grupos, sería 4-4-3.
¿Puede decirme cómo puedo hacerlo en C++? Quiero decir, para escribir una función
split_vec(const vector<image> &images, int split)
que hace la división?
Además, ¿puede decirme cuál es la forma más eficiente de hacer si no necesito crear nuevos vectores, simplemente itere a través de las subpartes? ¿Te gusta la función std::substr
con std::string
?
Nota: Ya uso Boost en el proyecto, así que si hay alguna buena herramienta en Boost para esto, entonces es perfecto para mí.
Gracias, esto es lo que se me ocurre: double loop = number/parts; para (int i = 0; i
zsero
@zsero, si tanto 'number' como' parts' son enteros, necesitarás convertir uno a double antes de hacer la división. Además, tendrá que preocuparse por el error de redondeo, hay casos en los que puede recibir un error de uno por uno al convertir de nuevo a entero. –
Actualmente utilizo dobles en la definición de la función y una función de redondeo() para el inicio y el final. ¿Crees que es posible tener un error de redondeo cuando utilizas la función round()? (Uso stringstream para redondear) – zsero