C ++或Boost是否有一个比较两个内存块的功能,就像C的memcmp一样?
我尝试了Google,但我只获得了“memcmp”功能。
答案 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 ++容器来抽象内存管理。然后你将处理对象!