मैं सी ++ ublas लाइब्रेरी का उपयोग करके एक मैटलैब एक्सटेंशन लिख रहा हूं, और मैं मैटलैब इंटरपेटर द्वारा पारित सी सरणी से अपने यूब्ला वैक्टर को प्रारंभ करने में सक्षम होना चाहता हूं। मैं स्पष्ट रूप से डेटा की प्रतिलिपि बनाकर (दक्षता के लिए) बिना सी सरणी से ublas वेक्टर प्रारंभ कैसे कर सकता हूं। मैं कोड की निम्न पंक्तियों के साथ कुछ के लिए देख रहा हूँ:एक सी सरणी से एक ublas वेक्टर शुरू करना
using namespace boost::numeric::ublas;
int pv[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
vector<int> v (pv);
सामान्य तौर पर, यह एक सरणी से एक सी ++ std::vector
प्रारंभ करने में हो सकता है? कुछ ऐसा:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int pv[4] = { 4, 4, 4, 4};
vector<int> v (pv, pv+4);
pv[0] = 0;
cout << "v[0]=" << v[0] << " " << "pv[0]=" << pv[0] << endl;
return 0;
}
लेकिन जहां प्रारंभिक डेटा की प्रतिलिपि नहीं करेगा। इस मामले में उत्पादन
v[0]=4 pv[0]=0
है, लेकिन मैं उत्पादन ही, सी सरणी को अद्यतन करने में परिवर्तन जहां डाटा सी ++ वेक्टर द्वारा की ओर इशारा होना चाहता हूँ
v[0]=0 pv[0]=0
इसके अलावा * सिद्धांत में * आप ublas :: वेक्टर का उप-वर्ग बना सकते हैं जिसने ऐसा किया। आपका सबक्लास एक कॉन्स ublas :: वेक्टर के रूप में व्यवहार कर सकता है जिसे कभी भी आकार में नहीं बदला जा सकता है, या आपको यह सुनिश्चित करने के लिए कंटेनर का आकार बदलने में शामिल सभी विधियों को ओवरराइड करना होगा कि स्मृति को मुक्त न करें जो इसके अंतर्गत नहीं है । केवल एक पूर्ण मासोचिस्ट इसका प्रयास करेगा। –