有没有办法通过为每个元素调用默认构造函数来构造N个元素的std::vector<C>
?
size_type
中的构造函数只调用C
的构造函数一次,然后将其复制构造函数用于其余元素。
答案 0 :(得分:5)
size_type的构造函数只调用C的构造函数一次 然后将其复制构造函数用于其余元素。
自C++11
以来不正确。看看std::vector::vector documentation:
...
vector(size_type count, const T&amp;值, const Allocator&amp; alloc = Allocator()); (2)
显式向量(size_type count,const Allocator&amp; alloc = Allocator()); (3)
...
然后:
...
2)使用带有值的元素的count副本构造容器 值。
3)构造具有count default插入的容器 T.的实例没有副本。
...
所以你需要第3个构造函数std::vector<C>(size)
似乎此行为仅在c++11
之后才存在。
我无法在c++11
之前找到这样做的方法。由于没有构造函数可以执行此操作,因此选项可能是创建一个空向量,保留,然后是emplace_back
元素。但是emplace_back
是c++11
以来所以...我们回到原点。
答案 1 :(得分:3)
这样做:
std::vector<C> v(size)
示例:强>
#include <iostream>
#include <string>
#include <vector>
class C{
public:
C(){
std::cout << "constructor\n";
}
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