2012-11-29 29 views
6

पर असाइन करें मेरे पास vector<vector<double> है, इसलिए मानों की एक तालिका (मैट्रिक्स) है। कॉलम में ग्रह की स्थिति और वेग होता है, इसलिए पंक्तियां उसी ग्रह के डेटा को संग्रहित करती हैं। मैं valarray में एक पंक्ति को बदलना चाहता हूं क्योंकि मुझे गणित परिचालन की आवश्यकता है। फिर मैं एक वेक्टर में valarrays (ग्रह) स्टोर करना चाहता हूँ। मैं इस तरह की कोशिश की:एक std :: vector को std :: valarray

vector<vector<double>> corps_tmp=configFile.get_corps(); // The function returns a vector<vector<double>> 

    valarray<double> corpX; 
    for (int i(0); i < corps_tmp.size(); i++) { 
     corpX = corps_tmp[i]; // I want to save the first row of the vector<vector<double>> on the valarray 
     corps.push_back(corpX); // I want to ''add'' the valarray to a vector. 
     corpX = 0; 
    } 

इस कोड काम करता है नहीं है और मैं एक valarray करने के लिए एक वेक्टर का काम चारों ओर एक त्रुटि प्राप्त (जाहिरा तौर पर अनुमति नहीं)।

क्या मैंने ऐसा करने की कोशिश की एक सरल तरीके से हासिल करने का कोई तरीका है?

+2

आप अपने मैट्रिक्स के लिए एक सादे 'std :: वेक्टर ' का उपयोग करना चाहिए और उचित सूचकांक की गणना करने के लिए कुछ सूत्रों का उपयोग करें। 'std :: vector >' शिकंजा कैश। – inf

+0

@ बांसबो मुझे एक संख्यात्मक agorithm बनाने के लिए valarray की जरूरत है जो एक ही समय में स्थिति और वेग दोनों को एकीकृत करता है (इसलिए पूरे valarray)। –

उत्तर

8

एक वेक्टर से एक valarray बनाने के लिए:

std:valarray<double> corpX(corps_tmp[i].data(), corps_tmp[i].size()); 

एक सदिश में वापस डेटा लिखने के लिए:

corps_tmp[i].assign(std::begin(corpX), std::end(corpX)); 
+0

मुझे 'std :: start (std :: valarray)' या 'std :: end (std :: valarray)' के बारे में पता नहीं था। विशेष रूप से, हमारे पास 'std :: valarray' बनाते समय _non-iterator_ तर्क हैं एक वेक्टर से, और _iterator-like_ तर्क 'std :: vector' को असाइन करते समय - दोनों स्थितियों में, अपेक्षित तर्क-प्रकार वस्तु के प्रकार के साथ संगत होते हैं या असाइन किए जाते हैं। – damienh

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