2014-09-19 173 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

相關問題