2014-09-19 348 views
3

我有一个vector的一些参考类型reference_wrapper包装。因为我需要填写这个容器坏了我正在尝试设置为容器的初始大小:如何为reference_wrapper的STL容器设置初始大小?

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<T*>

+0

难道你看看文档[性病::的reference_wrapper(http://en.cppreference.com/w/cpp/utility/functional/reference_wrapper)?它不提供默认的构造函数。 – 2014-09-19 16:30:23

回答

5

你可以提供一台样机,有点自己的“未初始化”值:

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

你可以使用std ::矢量::储备法。

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

+0

'reverse'实际上不会增加​​矢量的大小,而只会增加矢量的大小。正如我所说的,我需要按顺序推送元素,所以'push_back'不适合我。 – none 2014-09-19 20:00:12

+0

如果您只填充v [5],会导致您对v [0] - v [4]的值有何期望? reference_wrapper必须引用_something_。 – 2014-09-19 21:15:09

相关问题