是否有C的“memcmp”的原生C ++替代品?

时间:2011-12-13 06:20:39

标签: c++ boost

C ++或Boost是否有一个比较两个内存块的功能,就像C的memcmp一样?

我尝试了Google,但我只获得了“memcmp”功能。

5 个答案:

答案 0 :(得分:26)

如果你想要一个可以处理指针和STL迭代器的函数,可以看一下<algorithm>中的std::equal

我认为std::equal是做std::memcmp的C ++方式(实际上它仍然是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

答案 1 :(得分:13)

您也可以在C ++中使用memcmp。它在C ++中也是原生的。

您需要做的就是,包括<cstring>,然后使用完全限定名称std::memcmp而不是memcmp。这是因为它与std命名空间一样,与所有其他标准库函数和类一样。

答案 2 :(得分:1)

使用memcmp。这是一个完全合法的C ++函数。

答案 3 :(得分:1)

memcmp是C ++标准库的一部分(通过包含)。

答案 4 :(得分:1)

memcmp是C ++标准库的一部分,可在<cstring>中使用。由于您的要求是比较2块内存(处理原始内存),您必须使用库中的memcmp或其他函数。

如果您不想处理内存,请使用C ++容器来抽象内存管理。然后你将处理对象!