पर pop_front को लागू करने का तेज़ तरीका मैं std :: vector का उपयोग करने वाले कुछ वर्गों और कई उपयोगिता विधियों का उपयोग कर रहा हूं।एक std :: vector
अब मुझे प्रत्येक वर्ग को उन वर्गों में से एक पर pop_front - push_back विधि का उपयोग करने की आवश्यकता है (लेकिन वे सभी जुड़े हुए हैं, और एक साथ काम करते हैं इसलिए मैं केवल एक ही नहीं बदल सकता)।
अधिकांश ऑपरेशन सभी तत्वों और पुश_बैक ऑपरेशंस पर पुनरावृत्त होते हैं, इसलिए मुझे सबसे अच्छे काम के लिए क्या करना चाहिए: उन वर्गों और उपयोगिताओं के भंडार को फोर्क करें, सबकुछ टेम्पलेट करें और डेक या सूची का उपयोग करें।
लेकिन इसका मतलब है कि बहुत सारे कोड पुनर्लेखन और बहुत सारे परीक्षण से मुझे समय सीमा याद आती है।
इसलिए मुझे एक स्थिर-आकार वाले वेक्टर (आकार में परिवर्तन नहीं होगा) के लिए एक कुशल पॉप_फ्रंट लिखने की सलाह चाहिए।
मैं here एक रास्ता मिल गया है:
template<typename T>
void pop_front(std::vector<T>& vec)
{
vec.front() = vec.back();
vec.pop_back();
vec.front() = vec.back(); // but should this work?
}
और एक और विचार किया जाना चाहिए:
template<typename T>
void pop_front(std::vector<T>& vec, already_allocated_vector vec1)
{
vec1.clear();
copy(vec.begin(), vec.end()-1, vec1.begin());
copy(vec1.begin(), vec1.end(), vec.begin());
}
इन दोनों के समाधान के लिए तेजी से क्या है? कोई अन्य समाधान?
"आकार बदल नहीं जाएगा" का क्या मतलब है? Pop_front करने के बाद, वेक्टर पहले जैसा ही आकार होगा? यदि हां, तो अंतिम तत्व कचरा होना चाहिए? –
वेक्टर का आकार समान है, क्योंकि एक पॉप के बाद मैं अचानक धक्का देता हूं। प्रत्येक फ्रेम मैंने एक ही विधि में एक पॉप और पुश बनाया ताकि इस विधि से पहले और बाद में वेक्टर उसी आकार का हो – nkint
गति के बारे में चिंता करने से पहले, ** शुद्धता ** के बारे में चिंता करें। दुनिया में सभी गति का मतलब कुछ भी नहीं है यदि आपको मिलने वाला नतीजा सिर्फ सादा गलत है, और जहां तक मैं कह सकता हूं, तो आपके उम्मीदवार गलत हैं। पहले व्यक्ति को 'pop_back_and_overwrite_front_with_penultimate' नाम दिया जाना चाहिए, और दूसरे को' invoke_undefined_behavior_and_pop_back' नाम दिया जाना चाहिए। ('Vec1.begin()' को लिखना अनिर्धारित है क्योंकि 'vec1' खाली है; आपको 'vec1.clear()' के बजाय' vec1.resize (vec.size() - 1) लिखना होगा।) जब मैं वेक्टर ऑपरेशंस से निपट रहा हूं, तो मैं कभी-कभी एक तस्वीर खींचता हूं। शायद वह भी आपकी मदद करेगा। –