Как создать std::vector<T*>
из std::vector<T>
при удалении конструктора копирования T(const T&)
?
Почему янужно это?- Нашему функтору потоков ( tbb ) требуется vector
из T*
.
// sample code
std::vector<T> vt;
std::vector<T*> vtp;
for (...)
{
T a;
a.build(args...); // 'build()' rebuilds the point tree
vt.push_back(a);
}
// store T pointer in vtp
for (auto i = vt.begin(); i != vt.end(); i++)
vtp.emplace_back(&*i); // error: use of deleted function 'T::T(const T&)'
Так как я создаю T
объект a
в цикле, чтобы я мог 't (однозначно) сохраните a*
непосредственно в vtp
, так как оно будет перезаписано на тот же адрес.Я использую C ++ 11 и GCC4.8 .
У меня есть альтернативное решение:
T t_a1, t_a2, t_a3, t_a4;
vtp = {&t_a1, &t_a2, &t_a3, &t_a4};
for (...)
{
(vtp[pageIdx])->build(args...); // pageIdx is block index in current range block
}
В этом подходеМне нужно заранее построить определенное количество деревьев.Хотя я могу легко рассчитать количество деревьев, получив количество блоков в диапазоне.Но я хочу заранее избежать создания дерева вручную и не уверен, будет ли оно эффективным.