C++ veya Boost, C's memcmp gibi iki bellek bloğunu karşılaştıran bir işlevi var mı?C'nin "memcmp" e yerel C++ alternatifi var mı?
Google'ı denedim ancak yalnızca "memcmp" işlevini aldım.
C++ veya Boost, C's memcmp gibi iki bellek bloğunu karşılaştıran bir işlevi var mı?C'nin "memcmp" e yerel C++ alternatifi var mı?
Google'ı denedim ancak yalnızca "memcmp" işlevini aldım.
C++'da memcmp
'u da kullanabilirsiniz. C++ da yerlidir.
Yapmanız gereken tek şey <cstring>
içeriyor ve yerine std::memcmp
tam nitelikli ad kullanıyor. Diğer tüm standart kitaplık işlevleri ve sınıfları gibi, std
ad alanında olmasıdır.
Bunu biliyorum ama C++ olan bir şey hakkında soru soruyorum! – malhobayyeb
@ MIH1406: "memcmp" olmayan ancak tam olarak aynı şeyi yapan anlamına gelir? Neden C++ 'nun bir başka işlevi sağladığını düşünüyorsunuz, bu da * memcmp' ile aynı şeyi yapar? C++, çoğaltmayı önler. Ve 'std :: memcmp' kullanmanın nesi yanlış? – Nawaz
C'nin eşyalarını kullanmak istemiyorum. Sadece C++ için bir şeye ihtiyacım var. – malhobayyeb
Memcmp kullanın. Tamamen meşru bir C++ işlevi.
memcmp, C++ standart kitaplığının bir parçasıdır (dahil etme).
Her iki göstergeyi ve STL yineleyicileri ele alabilen bir işlev istiyorsanız, <algorithm>
numaralı telefondan std::equal
'a bakın.
C++ std::memcmp
yapmanın bir yolu olmalı std::equal
dikkate alacağını (hala gerçekten C++, ancak yineleyici nesneleri std::memcmp
işlemek değildir).
#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";
}
}
çıkış
memory of p1 == memory of a1
memory of p1 != memory of vec
Bence anahtar fark, memcmp'in bayt bloklarını karşılaştırmasıdır, oysa nesneler için eşitlik temeline dayalı nesnelerin eşit karşılaştırma aralıkları tanımlanmıştır. - Bir örnek, keyfi çöp ile doldurulabilen doldurma baytları bir örnek: http://ideone.com/aEdGa – UncleBens
@UncleBens Evet, farklılıklar vardır ve çoğu kişi bu std :: memcmp en çok daha büyük için optimize edilir hız, std :: equal, yerel türlerle uğraşırken aynı performansa sahip olmak için şablon uzmanlıklarına sahip olabilir (ve çoğu zaman). –
@UncleBens Eminim bu senin amacın değildi, ama başkalarına hatırlatmak için; Nesnelerin ham belleğini (sıklıkla dolgu içerir) karşılaştırmak hiç önerilmez. C++ yazdığımızdan, kendi operatörünüzü == 'tanımlayın, bunun yerine –
memcmp
<cstring>
bir C kısmı ++ standart kitaplığı ve kullanılabilir. Gereksiniminiz 2 bellek hafızasını (ham bellekle uğraşmak) karşılaştırmak olduğundan, kütüphanede memcmp
veya diğer işlevleri kullanmanız gerekmektedir.
Bellek ile uğraşmak istemiyorsanız, bellek yönetimi için C++ kapsayıcılarını kullanın. O zaman nesnelerle uğraşıyor olacaksın!
C++ 'da memcmp' var ... – Dan