Есть ли собственная альтернатива 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++ для абстрактного управления памятью. Тогда вы будете иметь дело с объектами!