STL: создать векториз вектора <T>при удалении T (const T &) - PullRequest
0 голосов
/ 02 июня 2018

Как создать 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
}

В этом подходеМне нужно заранее построить определенное количество деревьев.Хотя я могу легко рассчитать количество деревьев, получив количество блоков в диапазоне.Но я хочу заранее избежать создания дерева вручную и не уверен, будет ли оно эффективным.

...