मुझे मेरे साथ दो कार्यक्रम मिल गए हैं, दोनों एक ही काम कर रहे हैं। वे सिर्फ मूल्य के लिए एक बुलियन सरणी/वेक्टर सेट कर रहे हैं। वेक्टर का उपयोग करने वाले कार्यक्रम को चलाने के लिए 27 सेकंड लगते हैं जबकि 5 गुना अधिक आकार वाले सरणी वाले प्रोग्राम में 1 से कम समय लगता है। मैं इस सटीक कारण को जानना चाहता हूं कि ऐसा बड़ा अंतर क्यों है? क्या वेक्टर वास्तव में अक्षम हैं?सी ++ वेक्टर बनाम ऐरे (समय)
प्रोग्राम का उपयोग वैक्टर
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
int main(){
const int size = 2000;
time_t start, end;
time(&start);
vector<bool> v(size);
for(int i = 0; i < size; i++){
for(int j = 0; j < size; j++){
v[i] = true;
}
}
time(&end);
cout<<difftime(end, start)<<" seconds."<<endl;
}
रनटाइम - 27 सेकंड
प्रोग्राम का उपयोग सरणी
#include <iostream>
#include <ctime>
using namespace std;
int main(){
const int size = 10000; // 5 times more size
time_t start, end;
time(&start);
bool v[size];
for(int i = 0; i < size; i++){
for(int j = 0; j < size; j++){
v[i] = true;
}
}
time(&end);
cout<<difftime(end, start)<<" seconds."<<endl;
}
रनटाइम - < 1 सेकंड
प्लेटफार्म - विजुअल स्टूडियो 2008 ओएस - विंडोज विस्टा 32 बिट एसपी 1 प्रोसेसर इंटेल (आर) पेंटियम (आर) दोहरी सीपीयू T2370 @ 1.73GHz मेमोरी (RAM) 1.00 जीबी
धन्यवाद
खुशी के लिए खोज
std :: वेक्टर कंटेनर नहीं है। इसे पढ़ें: http://www.gotw.ca/publications/mill09.htm –
महत्वपूर्ण नोट: भले ही आप सही निष्कर्ष पर पहुंचें, आप उचित तुलना नहीं कर रहे हैं। आप innermost लूप ('v [i] = true' कथन) के एन^2 पुनरावृत्तियों को निष्पादित करते हैं, लेकिन एन एक परीक्षण में 2000 है और दूसरे में 10000 है, तो आप वास्तव में 25 गुना अधिक काम कर रहे हैं, 5 नहीं 'वेक्टर' और एक सादे सरणी के बीच के अंतर से अलग-अलग समय। यह वास्तव में अंतर को और भी स्पष्ट बनाता है। –
@ user235022 क्या आपका मतलब है 'v [j] = true; 'v [i] = true' के बजाय? अन्यथा यह आंतरिक लूप आउट को अनुकूलित करने के लिए कंपाइलर के लिए बहुत आसान होना चाहिए, क्योंकि आपके कार्य लूप चर पर निर्भर नहीं हैं। – fiktor