जबकि कुछ विरासत कोड के साथ एक परियोजना में काम कर मैं इस समारोह पाया:शुरु कर रहा है std :: एसटीडी के वेक्टर :: स्ट्रिंग
std::vector<std::string> Object::getTypes(){
static std::string types [] = {"type1","type2", "type3"};
return std::vector<std::string> (types , types +2);
}
मैं शायद इस रूप में लिखा है |:
std::vector<std::string> Object::getTypes(){
std::vector<std::string> types;
types.push_back("type1");
types.push_back("type2");
types.push_back("type3");
return types;
}
है यह केवल एक स्टाइल पसंद है या क्या मुझे कुछ याद आ रही है? किसी भी तरह की सहायता का स्वागत किया जाएगा। क्षमा करें अगर यह बहुत बुनियादी है।
अद्यतन: असल में पाया विभिन्न वर्गों है कि एक ही विधि ओवरराइड, यह एक ही रास्ता या अन्य ऐसा यह और भी अस्पष्ट है। मैं उन्हें सब कुछ वही बना दूंगा लेकिन यदि कोई है तो बेहतर दृष्टिकोण पसंद करेंगे।
संपादित
कृपया ध्यान दें कि ऊपर विरासत कोड गलत है क्योंकि यह केवल पहले दो सरणी के तत्वों के साथ वेक्टर initializes। हालांकि, टिप्पणियों में इस त्रुटि पर चर्चा की गई है और इस प्रकार संरक्षित किया जाना चाहिए।
...
return std::vector<std::string> (types, types + 3);
...
पहला अवतार सिद्धांत रूप में अधिक कुशल हो सकता है क्योंकि इसमें किसी भी स्मृति पुन: आवंटन शामिल नहीं है। कम फ़ंक्शन कॉल भी हैं। सी ++ में नोट 11 आप कह सकते हैं 'वापसी std :: वेक्टर {"टाइप 1", "टाइप 2", "टाइप 3"}; '। –
juanchopanza
@juanchopanza इसके अलावा, उस संस्करण में, कोड और डेटा का अलगाव अधिक स्पष्ट है, इसलिए यह वाक्य रचनात्मक रूप से क्लीनर है। –
मेरी पिछली टिप्पणी में सुधार: सी ++ 11 में, आप इसे कम शब्दों में प्राप्त कर सकते हैं: 'वापसी {" टाइप 1 "," टाइप 2 "," टाइप 3 "};'। – juanchopanza