2011-11-22 16 views
8

मैं वैक्टरसी ++ वेक्टर जम जाता है

vector <double> A; 
double B = 0; 

A.reserve(100); 
for(itr = 0; itr < 210; itr++) 
{ 
    term1 = pow(r[itr], 12); 
    term1 = 1/term1; 
    term2 = pow(r[itr], 6); 
    term2 = 2/term2; 
    A.push_back(term1 - term2); 
} 
B = accumulate(A.begin(), A.end(), 0); 

तथापि के लिए संचित समारोह का उपयोग करने के कोशिश कर रहा था, मैं हमेशा बी = 0 हो गया, जबकि एक अशून्य मान

+2

हम कोड है कि एक भरता देख सकते हैं? –

+0

आपको अपनी समस्या का पुनरुत्पादन करने वाला एक न्यूनतम कोड उदाहरण पोस्ट करना चाहिए। कोड का यह टुकड़ा वास्तव में मदद नहीं करता है। –

+0

अधिक कोड आवश्यक अपवाद। – hochl

उत्तर

23

std::accumulate इस अर्थ में थोड़ा सा स्नेकी है कि परिणाम का प्रकार प्रारंभिक मान का प्रकार है, और कंटेनर तत्वों का प्रकार नहीं है! तो आपका accumulator int एस पैदा करता है।

इसे ठीक करने के लिए एक double में जमा:

accumulate(A.begin(), A.end(), 0.0); 
//        ^^^^^^^ literal of type double 
+1

आप एक प्रतिभाशाली हैं! – Josh

+1

+1 यह एक मुश्किल है। – hochl

2

था कुंजी हो सकता है आपके कैसे कर रहे हैं [ ...] //` वेक्टर ए डबल बी = 0 में मान भरें;

A.reserve(100); 
A.push_back(1); 
A.push_back(2); 
B = accumulate(A.begin(), A.end(), 0); 
return 0; 

बी का समाधान करता है = 3.0

अगर रिजर्व के बाद आप एक [0] = 1 यह है बुरा कोड कर रहे हैं। इसके बजाय आप क्या करना चाहते हैं आकार बदलना है।

आरक्षित केवल आप यह वास्तव में वैध iterators का निर्माण नहीं करता .. तो A.begin() अभी भी A.end()

कोड परिवर्तन को देख के बराबर होती है समर्थन स्मृति क्षमता देता है,, क्या तुम जानते हो पूर्णांक और डबल गणित के बीच अंतर? शब्द 1 और टर्म 2 अभिन्न हैं?

+1

वे युगल हैं, और मुझे संचित बयान (मुझे 0.0 में डालना पड़ा था) के साथ समस्या हो रही थी ... सुंदर स्नीकी – Josh

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