c++ - std::vector resize() works only after clear() -


मेरे पास एक वेक्टर वस्तु है:

  std :: vector & lt; std :: vector & lt; MyClass & gt; & gt; _मैट्रिक्स;  

यह कुछ डेटा के साथ 2 डी सरणी है। जब मैं इनके साथ आयामों का आकार बदलना चाहता हूं:

  _matrix.resize (_rows, std :: vector & lt; MyReal & gt; (_ colms)); // _ पंक्तियों और _colms ints हैं  

यह आदेश ऑब्जेक्ट के लिए कुछ नहीं करता है तो इसका आकार बदलने के लिए मुझे पहले कॉल करना होगा:

  _matrix.clear ();  

और फिर:

  _matrix.resize (_rows, std :: vector & lt; MyReal & gt; (_ colms));  

बेशक, मैं डेटा खो रहा हूं (मेरे मामले में यह कोई फर्क नहीं पड़ता)

क्या यह अपेक्षित व्यवहार है?

<पी > डॉक्स के लिए:

_Val: नए तत्वों का मान सदिश में जोड़ा जाता है यदि नया आकार बड़ा आकार बड़ा हो।

केवल नई पंक्तियों को अतिरिक्त कॉलम ( std :: vector & lt; MyReal & gt; (_ colms) ) के साथ वैक्टर प्राप्त होते हैं। resize मौजूदा पंक्तियों को नहीं बदलेगा।

अपडेट: पूरे वेक्टर का आकार बदलने के लिए, मौजूदा पंक्तियों से दोबारा पुनरावृति करें और उन वैक्टर का आकार बदलें, फिर जोड़ें नई पंक्तियाँ ऐसा कुछ काम करना चाहिए:

  के लिए (आकार_टी i = 0; i & lt; _matrix.size (); i ++) _matrix [i] .resize (_colms); _matrix.resize (_rows, std :: vector & lt; MyReal & gt; (_ colms));  

Comments