C++ C++;:标准::矢量::调整大小vs.“;“正常”;分配
在C++ C++;:标准::矢量::调整大小vs.“;“正常”;分配,c++,memory-management,vector,allocation,C++,Memory Management,Vector,Allocation,在std::transform的代码示例中,有这样一个代码示例: std::vector<int> foo; std::vector<int> bar; //add some elements to foo bar.resize(foo.size()); //store elements transformed from foo's in bar std::vector foo; 向量条; //向foo添加一些元素 调整大小(foo.size()); //将从fo
std::transform
的代码示例中,有这样一个代码示例:
std::vector<int> foo;
std::vector<int> bar;
//add some elements to foo
bar.resize(foo.size());
//store elements transformed from foo's in bar
std::vector foo;
向量条;
//向foo添加一些元素
调整大小(foo.size());
//将从foo转换的元素存储在bar中
我想知道
std::vector<int> bar;
bar.resize(foo.size());
std::向量条;
调整大小(foo.size());
有什么不同吗
std::vector<int> bar(foo.size());
std::向量条(foo.size());
如果是这样的话,怎么做呢?没有区别,只是后者更高效、更简洁。没有区别。至少不是以您显示的方式(在
bar
的定义和resize
的调用之间没有插入foo
。并且稍微不太清楚发生了什么。。。第二个是创建一个值为size或size向量的项目吗?我们都知道,但不太熟练的用户会发现第一种形式更清晰。但是,我认为第一种方法不值得这样做。那么内部阵列的初始分配呢?推迟到第一次插入吗?这是由标准定义的还是特定于实现的细节?@odyss jii没有检查标准,而是读取(这表示大小设置构造函数是“线性计数的”)我会说内存是立即分配和初始化的,所以我猜默认构造函数中有一个特定于实现的初始数组大小?如果是这样,那么OP的两个片段之间的实现特定的微小差异将是在第一种情况下额外的删除和数组分配。@odyss jii No默认构造函数创建一个大小为零的向量(并且根本不需要分配任何内存),默认构造向量中的任何元素访问都是不允许的。嗯,零大小的向量是的,但这并没有说明内部数组(请参见容量和保留方法)。我想这取决于使用的分配器和调用它的时间。