मुझे सी ++ एसटीएल कंटेनर से विरासत मिली है और इसमें अपनी खुद की विधियां जोड़ें। तर्क यह था कि ग्राहकों के लिए, यह एक नियमित सूची कार्य करेगा, फिर भी एप्लिकेशन-विशिष्ट विधियों को आसानी से बुलाया जा सकता है।उपयोगकर्ता परिभाषित विधियों के साथ सी ++ एसटीएल कंटेनर का विस्तार करने के बेहतर तरीके पर सलाह
यह ठीक काम करता है, लेकिन मैंने एसटीएल से विरासत में नहीं होने के बारे में कई पोस्ट पढ़ी हैं। क्या कोई एक ठोस सलाह प्रदान कर सकता है कि मैं नीचे दिए गए कोड को बेहतर तरीके से कैसे लिख सकता हूं?
class Item
{
int a;
int b;
int c;
int SpecialB()
{
return a * b + c;
}
};
class ItemList : public std::vector<Item>
{
int MaxA()
{
if(this->empty())
throw;
int maxA = (*this)[0].a;
for(int idx = 1; idx < this->size(); idx++)
{
if((*this)[idx].a > maxA)
{
maxA = (*this)[idx].a;
}
}
return maxA;
}
int SpecialB()
{
if(this->empty())
throw;
int specialB = (*this)[0].SpecialB();
for(int idx = 1; idx < this->size(); idx++)
{
if((*this)[idx].SpecialB() < specialB)
{
specialB -= (*this)[idx].c;
}
}
return specialB;
}
int AvgC()
{
if(this->empty())
throw;
int cSum = 0;
for(int idx = 0; idx < this->size(); idx++)
{
cSum += (*this)[idx].c;
}
return cSum/this->size(); // average
}
};
संपादित: विचारशील जवाब का एक समूह के लिए धन्यवाद। मैं इसके बजाय सहायक कार्यों का निर्माण करूंगा और अब से एसटीएल कंटेनर से कभी भी उत्तराधिकारी नहीं होगा।
लेकिन एक समय में किसी आइटम पर काम नहीं करता है? मेरे विशेष मामले को डेटा सदस्यों पर काम करने की जरूरत है। i.e. :: ए, :: बी, या :: सी ...? –
sivabudh
@ShChris, यही कारण है कि आप एक मज़ेदार का उपयोग करते हैं जो आपके लिए भारी भारोत्तोलन करता है ... –
@ ShaChris23: अधिकांश एल्गोरिदम मज़दूरों को स्वीकार कर सकते हैं जो आपके सदस्यों को – bayda