【问题标题】:How to set an initial size for an STL container of reference_wrapper?如何为 reference_wrapper 的 STL 容器设置初始大小?
【发布时间】:2014-11-14 07:33:00
【问题描述】:

我有一个 vector 包含在 reference_wrapper 中的某种引用类型。由于我需要乱序填充此容器,因此我正在尝试为容器设置初始大小:

vector<std::reference_wrapper<T>> v(5);

v[3] = ..
v[2] = ..
v[4] = ..
v[5] = ..
v[1] = ..

编译失败,出现如下错误:

error: no matching function for call to ‘std::reference_wrapper<int>::reference_wrapper()’

是否有解决方法来完成这项工作,还是我必须为此使用vector&lt;T*&gt;?

【问题讨论】:

标签: c++ c++11 stl reference-wrapper


【解决方案1】:

你可以使用 std::vector::reserve 方法。

std::vector< std::reference_wrapper<T> > v;
v.reserve(5);
v.push_back( std::ref( t0 ) ); 
v.push_back( std::ref( t1 ) ); // and etc.. where  t0, t1 - some variable type of T.

Coliru example

【讨论】:

  • reverse 实际上并没有增加向量的大小,而只是增加了它的内部存储。正如我所说,我需要将元素推乱,所以push_back 不适合我。
  • 如果您只填充了 v[5],您希望 v[0] - v[4] 的值是多少? reference_wrapper 必须引用 something.
【解决方案2】:

您可以提供一个原型,类似于您自己的“未初始化”值:

T blank;
std::vector<std::reference_wrapper<T>> v(5, ref(blank));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-19
    • 2013-03-29
    • 2012-07-12
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多