![](/img/trans.png)
[英]push_backs to a std::vector<std::reference_wrapper<type>>
[英]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.