2015-12-26 16 views
7

मैं एक स्थानीय std::vector<std::reference_wrapper<T> > है और अब मैं एक वास्तविक प्रतिलिपि वापस जाने के लिए उसके तत्वों की हैं (यानी std::vector<T>) चाहते हैं। क्या लूप से बेहतर तरीका है?कैसे std :: वेक्टर कन्वर्ट करने के लिए <std :: reference_wrapper <T>> एसटीडी :: वेक्टर <T>

उदाहरण:

std::vector<T> foobar() { 
    std::vector<std::reference_wrapper<T> > refsToLocals; 
    /* 
     do smth with refsToLocals 
    */ 
    std::vector<T> copyOfLocals; 
    for (auto local : refsToLocals) 
     copyOfLocals.insert_back(local.get()); 
    return copyOfLocals; 
} 

उत्तर

8

ऐसा लगता है, स्पष्ट दृष्टिकोण सिर्फ std::vector<std::reference_wrapper<T>> से एक दृश्य से एक std::vector<T> निर्माण करने के लिए है:

std::vector<T> foobar() { 
    std::vector<std::reference_wrapper<T> > refsToLocals; 
    /* do smth with refsToLocals */ 
    return std::vector<T>(refsToLocals.begin(), refsToLocals.end()); 
} 
1

आप std::copy इस तरह से इस्तेमाल कर सकते हैं:

std::copy(
    refsToLocals.begin(), 
    refsToLocals.end(), 
    std::back_inserter(copyOfLocals)); 

फोन copyOfLocals.reserve(refsToLocals.size()) का उपयोग सुनिश्चित करें। यह प्रतियों और ढेर आवंटन को कम करेगा।

संबंधित मुद्दे