Как установить начальный размер для контейнера STL reference_wrapper?

у меня есть 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<T*> для этого?

3

Решение

Вы можете предоставить прототип, своего рода «неинициализированное» значение:

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

Другие решения

Вы можете использовать метод 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.

Пример колиру

0

По вопросам рекламы [email protected]