STL:当删除T(const T&amp;)时,从vector <t>创建vector <t *>

时间:2018-06-02 06:50:03

标签: c++ c++11 stl

如果删除了复制构造函数 CASE WA_COL-INTTYPE. WHEN 'A'. LO_DESCR_RESULT = CL_ABAP_ELEMDESCR=>GET_DECFLOAT16( ). WHEN 'E'. LO_DESCR_RESULT = CL_ABAP_ELEMDESCR=>GET_DECFLOAT34( ). ,如何从 std::vector<T*> 创建 std::vector<T>

为什么我需要这个?
- 我们的线程( tbb )仿函数需要T(const T&) 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直接存储到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
}

在这种方法中,我需要提前构建一定数量的树。虽然,我可以通过获取范围内的块数来轻松计算树的数量。但我想提前避免手动创建树,我不确定它是否有效。

0 个答案:

没有答案