2011-12-13 6 views
6

क्या सी ++ या बूस्ट में एक ऐसा फ़ंक्शन है जो सी के memcmp की तरह स्मृति के दो ब्लॉक की तुलना करता है?क्या सी के "memcmp" के लिए कोई मूल सी ++ विकल्प है?

मैंने Google की कोशिश की लेकिन मुझे केवल "memcmp" फ़ंक्शन मिला।

+4

सी ++ में 'memcmp' है ... – Dan

उत्तर

12

आप सी ++ में memcmp का भी उपयोग कर सकते हैं। यह सी ++ में भी मूल है।

आपको जो करना है वह है <cstring> और फिर memcmp के बजाय पूरी तरह से योग्य नाम std::memcmp का उपयोग करें। ऐसा इसलिए है क्योंकि यह std नामस्थान में है, जैसे कि हर दूसरे मानक लाइब्रेरी फ़ंक्शन और कक्षाएं।

+0

मुझे पता है, लेकिन मैं केवल कुछ ऐसा करने के बारे में पूछ रहा हूं जो सी ++ है !! – malhobayyeb

+1

@ MIH1406: मतलब जो 'memcmp' नहीं है लेकिन वास्तव में वही काम करता है? आपको क्यों लगता है कि सी ++ एक और फ़ंक्शन प्रदान करेगा, जो वास्तव में * memcmp' जैसा ही करता है? सी ++ नकल से बचाता है। और 'std :: memcmp' का उपयोग करने में क्या गलत है? – Nawaz

+0

मैं सी की सामग्री का उपयोग नहीं करना चाहता हूं। मुझे केवल सी ++ के लिए कुछ चाहिए। – malhobayyeb

1

memcmp का उपयोग करें। यह एक पूरी तरह से वैध सी ++ समारोह है।

1

memcmp सी ++ मानक पुस्तकालय (समावेशन द्वारा) का हिस्सा है।

22

यदि आप एक फ़ंक्शन चाहते हैं जो दोनों पॉइंटर्स और एसटीएल इटरेटर्स को संभाल सकता है तो <algorithm> पर एक नज़र डालें।

मैं std::equal पर विचार सी ++ std::memcmp करने का तरीका चाहते हैं (जो वास्तव में अभी भी सी ++ है, लेकिन 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

हैं, मुझे लगता है कि मुख्य अंतर यह है कि memcmp बाइट्स के ब्लॉक की तुलना करता है, जबकि वस्तुओं के बराबर तुलनात्मक वस्तुओं के आधार पर वस्तुओं की बराबर तुलना होती है। - एक उदाहरण, memcmp पैडिंग बाइट्स का मूल्यांकन करता है जो मनमाने ढंग से कचरे से भरा जा सकता है: http://ideone.com/aEdGa – UncleBens

+0

@UncleBens हां, अंतर हैं और अधिकांश लोग उस std :: memcmp को अधिकतर लाएंगे गति, हालांकि std :: मूल प्रकार से निपटने के दौरान समान प्रदर्शन करने के लिए समान क्षमता (और अक्सर) टेम्पलेट विशेषज्ञता है। –

+0

@UncleBens मुझे यकीन है कि यह आपका मुद्दा नहीं था, लेकिन दूसरों को याद दिलाने के लिए; ऑब्जेक्ट्स की कच्ची मेमोरी की तुलना करना (जिसमें अक्सर पैडिंग शामिल है) बिल्कुल अनुशंसित नहीं है। चूंकि हम सी ++ लिख रहे हैं, अपना खुद का 'ऑपरेटर ==' इसके बजाय –

1

memcmp<cstring> में सी का एक हिस्सा ++ मानक पुस्तकालय और उपलब्ध है। चूंकि आपकी आवश्यकता स्मृति के 2 ब्लॉक (कच्ची मेमोरी से निपटने) की तुलना करना है, इसलिए आपको memcmp या लाइब्रेरी में अन्य फ़ंक्शंस का उपयोग करना होगा।

यदि आप स्मृति से निपटना नहीं चाहते हैं, तो सी ++ कंटेनर का उपयोग अमूर्त स्मृति प्रबंधन में करें। तब आप वस्तुओं से निपटेंगे!

संबंधित मुद्दे