¿Tiene C++ o Boost una función que compara dos bloques de memoria como el memcmp de C?¿Hay una alternativa nativa de C++ al "memcmp" de C?
Probé con Google, pero solo obtuve la función "memcmp".
¿Tiene C++ o Boost una función que compara dos bloques de memoria como el memcmp de C?¿Hay una alternativa nativa de C++ al "memcmp" de C?
Probé con Google, pero solo obtuve la función "memcmp".
Puede usar memcmp
en C++ también. También es nativo en C++.
Todo lo que necesita hacer es incluir <cstring>
y luego utilizar el nombre totalmente calificado std::memcmp
en lugar de memcmp
. Es porque está en el espacio de nombres std
, como cualquier otra función y clase de biblioteca estándar.
¡Lo sé, pero estoy preguntando sobre algo que es C++ solamente !! – malhobayyeb
@ MIH1406: Significa que no es 'memcmp' pero hace exactamente lo mismo? ¿Por qué crees que C++ proporcionaría otra función, que hace * exactamente * lo mismo que hace 'memcmp'? C++ evita la duplicación. ¿Y qué está mal con el uso de 'std :: memcmp'? – Nawaz
No quiero usar las cosas de C. Necesito algo solo para C++. – malhobayyeb
Use memcmp. Es una función C++ perfectamente legítima.
memcmp es parte de la biblioteca estándar de C++ (por inclusión).
Si desea una función que pueda manejar tanto punteros como iteradores STL, eche un vistazo a std::equal
en <algorithm>
.
me gustaría considerar std::equal
ser el C++ manera de hacer std::memcmp
(que es de hecho todavía C++, pero std::memcmp
no se ocupa de los objetos del iterador).
#include <iostream>
#include <vector>
#include <algorithm>
int
main (int argc, char *argv[])
{
int a1[] = {1,2,3,4};
int a2[] = {1,9,3,5};
int * p1 = new int[4];
std::vector<int> vec (a2, a2+4);
*(p1++) = 1; *(p1++) = 2;
*(p1++) = 3; *(p1++) = 4;
p1 -= 4;
if (std::equal (a1, a1+4, p1)) {
std::cout << "memory of p1 == memory of a1\n";
}
if (std::equal (vec.begin(), vec.end(), p1) == false) {
std::cout << "memory of p1 != memory of vec\n";
}
}
salida
memory of p1 == memory of a1
memory of p1 != memory of vec
Creo que la diferencia clave es que memcmp compara bloques de bytes, mientras que igual compara rangos de objetos en función de la igualdad, sin embargo, se define para los objetos. - Un ejemplo, memcmp que evalúa los bytes de relleno que pueden rellenarse con basura arbitraria: http://ideone.com/aEdGa – UncleBens
@UncleBens Sí, existen diferencias y la mayoría de las personas plantearán que std :: memcmp suele optimizarse para obtener mayor velocidad, aunque std :: equal podría tener (y con frecuencia tener) especializaciones de plantillas para tener el mismo rendimiento cuando se trata con tipos nativos. –
@UncleBens Estoy seguro de que este no era su punto, sino de recordarles a los demás; no se recomienda en absoluto comparar la memoria bruta de los objetos (que a menudo incluyen el relleno). Como nos dirigimos C++, definir su propio '' en lugar del operador == –
memcmp
es una parte de biblioteca de C++ estándar y disponible en <cstring>
. Como su requisito es comparar 2 bloques de memoria (que tratan con la memoria bruta), debe usar memcmp
u otras funciones en la biblioteca.
Si no desea ocuparse de la memoria, utilice contenedores C++ para gestionar la memoria de forma abstracta. ¡Entonces estarías lidiando con objetos!
there' memcmp' en C++ ... – Dan