关于C ++:如何初始化不同动态分配地址的向量

How to initialize a vector of distinct dynamically allocated addresses

是否可以在初始化期间创建std::vector vec;,以便vec的每个元素在堆上存储一个不同的地址?

简单地做

1
2
int N = 10;
std::vector<T*> vec(N, new T)

使vec的所有元素在堆上存储相同的地址。 我当然可以

1
2
3
4
5
int N = 10;
std::vector<T*> vec(N);
std::for_each(vec.begin(), vec.end(), [](auto &ptr){
  ptr = new int;
});

有没有办法从构造函数调用中做到这一点?


将值填充到向量中的构造函数都创建单个值的重复项,因此在这种情况下它们将无法工作。

但是,您可以比std::for_each做得更好。 由于您希望向量中的每个元素都用一个函数的结果填充,因此std::generate(或std::generate_n)显然更适合:

1
2
std::vector<T *> vec(N);
std::generate(vec.begin(), vec.end(), [] { return new int; });

也就是说,原始指针向量很可能是一个错误,所以我建议您探索其他选择。