Car*_*ton 6 c++ vector unique-ptr
我有一个矢量:
std::vector<std::unique_ptr<int>>
Run Code Online (Sandbox Code Playgroud)
并希望unique_ptr<int>在指定位置插入几个新的.有成员函数,std::vector::insert(iterator position, size_type n, const value_type& val)但唉,复制的限制unique_ptr不允许使用这个重载.
我已经读过这个问题,但是那个插入unique_ptr已存在于另一个向量中的问题.我想创造新的.
我意识到我可以用循环来做,例如在向量的开头插入3个新项:
for (int n = 0; n != 3; ++n)
vec.insert(vec.begin(), std::make_unique<int>(0));
Run Code Online (Sandbox Code Playgroud)
但是我想知道是否有更简洁的方法来做到这一点,并且可能是一个预先分配新内存的方法.
编辑澄清:添加到向量的项目数是完全随意的 - 我在我的示例代码中写了3但它可以是任何值,而不一定是编译时已知的值.
如果您在编译时知道要在向量中放入多少个指针,则可以使用如下所示的函数:
#include<vector>
#include<memory>
#include<cstddef>
template<std::size_t... I>
constexpr auto gen(std::index_sequence<I...>) {
std::vector<std::unique_ptr<int>> vec;
int arr[] = { (vec.push_back(std::make_unique<int>(0)), I)... };
(void)arr;
return vec;
}
template<std::size_t N>
constexpr auto create() {
return gen(std::make_index_sequence<N>{});
}
int main() {
auto vec = create<3>();
}
Run Code Online (Sandbox Code Playgroud)