Autor
|
Tema: Clase contenedora de bytes (Leído 1,944 veces)
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
Buenas, necesito escribir en un archivo y busco una clase contenedora de bytes, como por ejemplo podría ser vector<byte>, pero me vendría mejor una clase especializada, al igual que lo es string para cadenas de caracteres.
¿alguno sabe que clase es la que busco o si existe?, me vendría bien con métodos como find() etc.
Un saludo.
|
|
|
En línea
|
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Tienes a tu disposición todos los contenedores de la STD: vector, deque, list, ... Si quieres find, u otra función, los tienes en la librería <algorithm>. Trabaja con iteradores, así que sirven para cualquier contenedor.
|
|
|
En línea
|
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
Vamos que no hay un contenedor especializado para bytes.
Entonces, usaré vector<u_char>, pero ¿no quemara mucho la CPU si tengo que ir metiendo byte a byte dentro del vector con push_back()?
Imagina que son 3 megas, habría 3000000 de push_back() copiando byte a byte dentro del vector, además vector<> tenía un límite de miembros máximo, y creo que se podría susperar en casos como este.
Edito: El maximo del vector depende del tipo tiene sentido: En este caso puede llegar a almacenar: 42949672951 bytes. Unos 42 gigas XDDD.
Para escribir los bytes usare ofstream simplemente, el problema sería al leerlos habría que almacenarlos en un vector<> de bytes, con ifstream y luego ya una vez tenga el vector correcto aplico funciones como find() etc.
|
|
« Última modificación: 18 Octubre 2015, 21:11 pm por Kaxperday »
|
En línea
|
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
El límite de vector depende, pero suele llegar a la giga. 3 MB es poco. ¿Quemar la CPU por llenar un vector de 3 MB? ._. No infravalores una computadora xD
De todos modos, tienes varias formas de llenarlo. Lo mejor es que no empieces elemento a elemento. Primero, puedes usar vector::reserve para reservar la memoria inicial que requieras (evidentemente tener que copiar el vector constantemente al meter elementos es muy ineficiente).
También puedes usar vector::resize. Se diferencia de reserve en que este realmente cambia el tamaño del vector, no solo de su memoria.
Si has hecho resize, en evz de push_back, puedes usar iteradores o índices para rellenarlo.
|
|
|
En línea
|
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
Según vector.max_size(), puede llegar a almacenar 42,949672951 GBytes, otra cosa es que haya memoria en el ordenador para que eso sea posible XD.
El problema será en que no como leer con ifstream y meterlo en un vector al momento, con iteradores como dices, si sabia de resize(), la idea sería hacer resize y leer elemento a elemento del archivo y meterlo dentro del vector?, pero es muy ineficiente, ¿qué habría mejor?.
Ahora busco un poco como sería, la mejor manera entonces es ¿leer todo el contenido del archivo, meterlo en un vector<u_char>?
O igual se me está yendo mucho la olla y era mejor u_char* array= new u_char[tamaño]();
Saludos.
|
|
|
En línea
|
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Como digo, leer 3 MB no es nada. Lo más lento es la lectura del archivo, para lo cual debes usar un array. En difinitiva, buena parte de las opciones han sido dadas. Ahora elige la más eficiente para el uso que le vas a dar.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema de interacion entre una clase Interfaz y la clase que la llama
Java
|
yeah69
|
4
|
4,584
|
21 Mayo 2010, 06:30 am
por we4rt
|
|
|
Acceder a una variable privada de una clase desde otra clase
Programación C/C++
|
Alvaro093
|
4
|
30,522
|
27 Enero 2012, 09:46 am
por wachi
|
|
|
Ayuda en una lista contenedora
Programación C/C++
|
DarkSorcerer
|
3
|
2,203
|
9 Octubre 2013, 21:42 pm
por DarkSorcerer
|
|
|
Como sobre-escribir un método de una clase base en una clase heredada?
Programación C/C++
|
julian21931500
|
5
|
3,903
|
25 Febrero 2015, 23:49 pm
por ivancea96
|
|
|
Ayuda llamar a una clase y sus métodos dentro de otra clase (Android)
Java
|
LikeVodka
|
1
|
6,298
|
19 Abril 2015, 11:22 am
por MNicolas
|
|