回答
您也可以在C++中使用memcmp
。它也是C++原生的。
您需要做的只是包括<cstring>
,然后使用完全限定名称std::memcmp
而不是memcmp
。这是因为它在std
命名空间中,就像其他标准库函数和类一样。
我知道,但是我问的只是C++的东西! – malhobayyeb
@ MIH1406:不是'memcmp'但是完全一样的东西?为什么你认为C++会提供另一个函数,它和'memcmp'完全相同? C++避免了重复。而使用'std :: memcmp'有什么问题? – Nawaz
我不想使用C的东西。我只需要用于C++的东西。 – malhobayyeb
使用memcmp。这是一个完全合法的C++函数。
memcmp是C++标准库的一部分(通过包含)。
如果你想要一个既能处理指针又能处理STL迭代器的函数,看看<algorithm>
中的std::equal
。
我认为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比较字节块,而基于不同等级比较的对象范围是为对象定义的。 - 一个例子,memcmp评估填充字节,可以填充任意垃圾:http://ideone.com/aEdGa – UncleBens
@UncleBens是的,有差异,大多数人会提出,std :: memcmp是最经常优化的更大速度,但std :: equal可能(并且经常有)模板特化,在处理本机类型时具有相同的性能。 –
@UncleBens我相信这不是你的观点,而是提醒别人;不建议比较对象的原始内存(通常包括填充)。因为我们正在编写C++,所以定义你自己的'operator =='而不是 –
memcmp
是C的一部分++标准库和可用在<cstring>
。由于您的要求是比较2块内存(处理原始内存),因此您必须在库中使用memcmp
或其他函数。
如果你不想处理内存,那么使用C++容器来抽象内存管理。那么你会处理对象!
- 1. C++有没有CURL的替代品?
- 2. 是否有替代Windows的unistd.h(Visual C)?
- 3. EasyHook替代品C#
- 4. C++模板的替代品?
- 5. C++报告的替代品?
- 6. 是否有XCPlayground的替代品?
- 7. iOS中是否有AUSplitter的替代品?
- 8. 是否有任何svn_load_dirs.pl的替代品?
- 9. 是否有SqlGeography的Silverlight替代品?
- 10. 是否有一个本地替代mcrypt?
- 11. Google Docs是否有开源替代品?
- 12. 是否有任何IDA Pro替代品?
- 13. CodeIgniter是否有替代品投掷500s?
- 14. Capistrano是否有Perl或Lua替代品?
- 15. 是否有Axure RP替代品
- 16. C#中的HttpListener和Griffin.WebServer的替代品
- 17. 什么是下面的PowerShell代码的C#替代品?
- 18. C#中OrderBy Switch的替代品
- 19. 包含MS C runtime distro的替代品?
- 20. C#中windows钩子的替代品?
- 21. 编写C DLL的替代品?
- 22. 寻找C#的替代品System.Text.ASCIIEncoding()
- 23. C++ IPC替代本地COM接口?
- 24. 在C++ 11中有没有Boost.Bimap的替代品?
- 25. 为C#开发NoSQL的免费替代品(替代ravendb)
- 26. 条件变量的替代品(在Windows XP上的C/C + +)
- 27. 是否有一个实用的替代结构继承? (C#)
- 28. 是否有任何替代类似的NameValueCollection集合在C#
- 29. 在C++中是否有替代多态的方法?
- 30. 是否有替代MySQL的
在C++中有'memcmp' ... – Dan