为构造的std::vector中的每个元素调用默认构造函数
Invoke default constructor for each element in constructed std::vector
有没有一种方法可以通过调用每个元素的默认构造函数来构造N个元素的std::vector<C>
?
size_type
的构造函数只调用C
的构造函数一次,然后对其余元素使用其复制构造函数。
size_type中的构造函数只调用C的构造函数一次然后对其余元素使用其复制构造函数。
自C++11
以来不成立。查看std::vector::vector文档:
向量(size_type count,常量T&价值const分配器&alloc=Allocator());(2)
显式向量(size_type count,const Allocator&alloc=Allocator());(3)
然后:
2) 构造包含具有值的元素的计数副本的容器价值
3) 构造插入默认计数的容器T的实例。不复制。
所以你需要第三个构造函数std::vector<C>(size)
这种行为似乎只存在于c++11
之后。
在c++11
之前,我找不到这样做的方法。由于没有构造函数可以做到这一点,因此可以选择创建一个空向量、reserve,然后创建emplace_back
元素。但emplace_back
是从c++11
开始的,所以……我们回到了原点。
只需执行以下操作:
std::vector<C> v(size)
示例:
#include <iostream>
#include <string>
#include <vector>
class C{
public:
C(){
std::cout << "constructorn";
}
C(C const&){
std::cout << "copy/n";
}
};
int main()
{
std::vector<C> v(10);
}
结果:(C++11/14)
constructor
constructor
constructor
constructor
constructor
constructor
constructor
constructor
constructor
constructor
结果:(C++98)
constructor
copy
copy
copy
copy
copy
copy
copy
copy
copy
copy
实时演示
相关文章:
- 复制包含C++所有元素的对象!(构造函数和赋值,最佳实践?
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- 如何在 c++ 中将整个数组初始化为类构造函数中的单个元素
- 无法在构造函数中执行设置元素插入
- 如何在构造函数初始值设定项列表中使用 n 个元素初始化 std::vector<std::time_t>
- 如何在类中制作 2D 数组元素,然后在其构造函数中指定其维度?
- std::tuple默认构造函数,带有move可构造元素
- 如果我想从类型"T"定义元素的容器(来自 STL),那么"T"必须使用默认构造函数?
- 为 unordered_map 中的元素设置默认构造函数(如果是 [] 运算符)
- 在 new 关键字中,由默认构造函数初始化的类中的元素是否也使用 new 关键字在C++?
- 为什么只有在向量中已经有一个元素时才调用移动构造函数?
- 我们如何使用下面的集合构造函数构造设置元素
- clang格式:如何将构造函数的初始值设定项列表的每个元素保存在单独的行上
- 在不调用构造函数的情况下创建 Vector 元素
- C2280 STD :: vector的默认构造函数尽管具有移动构造函数,但仍需要元素的复制构造函数
- 实例化 std::vector 的唯一元素,而无需复制构造函数
- 如何将参数传递给工厂元素构造函数
- 未调用C++矢量元素构造函数
- vector.resize()方法在调整大小时调用默认的元素构造函数
- 在类构造函数中设置std::vector,为元素构造函数设置不同的值