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

C++ 如何初始化不同的动态分配地址向量,c++,pointers,vector,C++,Pointers,Vector,是否可以创建std::vector vec在初始化过程中,使得vec的每个元素在堆上存储一个不同的地址 简单地做 int N = 10; std::vector<T*> vec(N, new T) int N=10; 标准::向量向量向量(N,新T) 使vec的所有元素在堆上存储相同的地址。当然,我可以这么做 int N = 10; std::vector<T*> vec(N); std::for_each(vec.begin(), vec.end(), [](aut

是否可以创建
std::vector vec在初始化过程中,使得
vec
的每个元素在堆上存储一个不同的地址

简单地做

int N = 10;
std::vector<T*> vec(N, new T)
int N=10;
标准::向量向量向量(N,新T)
使vec的所有元素在堆上存储相同的地址。当然,我可以这么做

int N = 10;
std::vector<T*> vec(N);
std::for_each(vec.begin(), vec.end(), [](auto &ptr){
  ptr = new int;
});
int N=10;
std::vec(N);
std::for_each(vec.begin()、vec.end()、[](自动和ptr){
ptr=新的int;
});

在构造函数调用中有什么方法可以做到这一点吗

将值填充到向量中的构造函数都会创建单个值的副本,因此在这种情况下它们不起作用

不过,对于每个
,您都可以做得比std::稍好一些。由于您希望向量中的每个元素都填充函数的结果,
std::generate
(或
std::generate\n
)显然更适合:

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

也就是说,一个原始指针向量很可能是一个错误,因此我建议探索其他选项。

是否有任何方法可以从构造函数调用中实现这一点不。我可以设想一个自定义迭代器,一个la
istream\u迭代器
,它将在每次取消引用对象时使用
new
创建一个对象。然后可以使用
向量
构造函数获取一对迭代器。太麻烦了。我以前没有用过
std::generate
。在这种情况下,为什么它比std::for_each
更好?另外,您所说的其他选项是指
std::unique\u ptr
?@Iamanon:
std::generate
更好,因为它更具体。其他选项包括一个
唯一的\u ptr
以及一个。