Есть ли собственная альтернатива 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++.


memcmp является частью стандартной библиотеки C++ (включение).


memcmp является частью стандартной библиотеки C++ и доступные в <cstring>. Поскольку ваше требование-сравнить 2 блока памяти (имея дело с необработанной памятью), вы должны использовать memcmp или другие функции в библиотеке.

Если вы не хотите иметь дело с памятью, используйте контейнеры C++ для абстрактного управления памятью. Тогда вы будете иметь дело с объектами!