स्टैक पर QVector सरणी में निहित वस्तुओं को संशोधित करना इस तरह किया जा सकता है

//widget.cpp
//extract from widget constructor:
QVector<MyClass> myClassObjectsStack;
myClassObjectsStack.push_back(MyClass());
int index = 0;
myClassObjectsStack[index].firstName = "Michael";

जब QVector सरणी ढेर पर होती है, तो मैं अब वस्तुओं को तीन चरणों में संशोधित करता हूं:

//widget.cpp
//extract from widget constructor:
myClassObjectsHeap = new QVector<MyClass>;
myClassObjectsHeap->push_back(MyClass());

// (1) Assigning myClassObjectBuffer the object which is on heap:
myClassObjectBuffer = myClassObjectsHeap->at(index); 

// (2) Modifying value of buffer object
myClassObjectBuffer.firstName = "Ella";

// (3) Inserting buffer object at index position, like overwrite old object:
myClassObjectsHeap->insert(index, myClassObjectBuffer);

क्या मैं इसे और आसान तरीके से कर सकता हूँ या यह उचित है???

जैसे ढेर पर मौजूद क्लास ऑब्जेक्ट को बदलना बहुत आसान है:

myClassPtr = new MyClass;
myClassPtr->firstName = "Nelvyn";

जानकारी के लिए:

// myclass.h
class MyClass {

public:
  QString firstName;
  MyClass() { firstName = ""; }
  MyClass(QString nameValue) { firstName = nameValue; }
};
//widget.h
class Widget : public QWidget {
  Q_OBJECT

public:
  Widget(QWidget *parent = nullptr);
  ~Widget();
  QVector<MyClass> *myClassObjectsHeap;
  MyClass *myClassPtr;
  MyClass myClassObjectBuffer;

};
-1
KeepRunning85 28 पद 2020, 20:58

1 उत्तर

सबसे बढ़िया उत्तर

यहां बताया गया है कि आप इसे कैसे करते हैं:

(*myClassObjectsHeap)[index].firstName = "Ella";

आपको इसके बजाय std::vector का उपयोग करने पर विचार करना चाहिए क्योंकि यह हर तरह से श्रेष्ठ है। आप इस बात को उस पर एक अच्छी चर्चा के रूप में देख सकते हैं।

1
Ayxan Haqverdili 28 पद 2020, 23:44
आपकी टिप्पणी से असहमत हैं कि std::vector हर तरह से श्रेष्ठ है: stackoverflow.com/questions/5623218/… के बजाय।
 – 
mzimmers
28 पद 2020, 22:19
जो धागा आप जोड़ रहे हैं वह बहुत पुराना है। क्यूटी कंटेनर में बहुत अधिक कार्यक्षमता गुम है। मुझे यह नहीं मिला, लेकिन मुझे यकीन है कि मैंने क्यूटी लोगों द्वारा हाल ही में एक मुख्य वक्ता के रूप में देखा, जहां उन्होंने मूल रूप से कहा था कि क्यूटी-कंटेनर विरासत हैं, बस एसटीएल का उपयोग करें।
 – 
Ayxan Haqverdili
28 पद 2020, 22:59
ओह दिलचस्प। स्पष्टीकरण के लिए धन्यवाद। क्या वे सभी क्यूटी कंटेनर, या सिर्फ क्यूवेक्टर का जिक्र कर रहे थे? काश मैंने वह मुख्य वक्ता देखा होता।
 – 
mzimmers
28 पद 2020, 23:12
मुझे यह youtu.be/uZ68dX1-sVc?t=116 मिला। जाहिरा तौर पर यह आधिकारिक तौर पर क्यूटी कंपनी द्वारा नहीं है, इसलिए इसे इसके लायक होने के लिए लें।
 – 
Ayxan Haqverdili
28 पद 2020, 23:45