Есть ли собственная альтернатива C++ для"memcmp" C?
имеет ли C++ или Boost функцию, которая сравнивает два блока памяти так же, как memcmp C?
Я попробовал Google, но я получил только функцию "memcmp".
5 ответов
можно использовать memcmp
в C++, а также. Он также является родным на C++.
все, что вам нужно сделать, это включить <cstring>
а затем используйте полное имя std::memcmp
вместо memcmp
. Это потому, что это в std
пространство имен, как и все другие стандартные библиотечные функции и классы.
если вы хотите функцию, которая может обрабатывать как указатели, так и итераторы STL, взгляните на std::equal
на <algorithm>
.
Я считаю std::equal
быть способом c++ делать std::memcmp
(который действительно все еще C++, но std::memcmp
не обрабатывает объекты итератора).
#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";
}
}
выход
memory of p1 == memory of a1
memory of p1 != memory of vec
memcmp
является частью стандартной библиотеки C++ и доступные в <cstring>
. Поскольку ваше требование-сравнить 2 блока памяти (имея дело с необработанной памятью), вы должны использовать memcmp
или другие функции в библиотеке.
Если вы не хотите иметь дело с памятью, используйте контейнеры C++ для абстрактного управления памятью. Тогда вы будете иметь дело с объектами!