簡體   English   中英

如何轉換std :: vector <std::reference_wrapper<T> &gt;到std :: vector <T>

[英]How to convert std::vector<std::reference_wrapper<T> > to std::vector<T>

我有一個本地std::vector<std::reference_wrapper<T> > ,現在我想返回其元素的真實副本 (即std::vector<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;
}

看來,顯而易見的方法是從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());
}

您可以這樣使用std::copy

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

一定要使用call copyOfLocals.reserve(refsToLocals.size()) 它將最小化副本和堆分配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM