为构造 std::vector 中的每个元素调用默认构造函数
Invoke default constructor for each element in constructed std::vector
有没有办法通过为每个元素调用默认构造函数来构造 std::vector<C>
个 N 个元素?
size_type
的构造函数只调用一次 C
的构造函数,然后对其余元素使用其复制构造函数。
The constructor from size_type just calls C's constructor once and
then uses its copy constructor for the rest of the elements.
自 C++11
以来不正确。看看std::vector::vector documentation:
...
vector( size_type count,
const T& value,
const Allocator& alloc = Allocator()); (2)
explicit vector( size_type count, const Allocator& alloc = Allocator() ); (3)
...
然后:
...
2) Constructs the container with count copies of elements with value
value.
3) Constructs the container with count default-inserted
instances of T. No copies are made.
...
所以你需要第三个构造函数std::vector<C>(size)
似乎这种行为仅在 c++11
.
之后才存在
我在 c++11
之前找不到这样做的方法。由于没有构造函数可以执行此操作,因此可以选择创建一个空向量,保留然后 emplace_back
个元素。但是 emplace_back
是因为 c++11
所以...我们回到原点。
只需这样做:
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
有没有办法通过为每个元素调用默认构造函数来构造 std::vector<C>
个 N 个元素?
size_type
的构造函数只调用一次 C
的构造函数,然后对其余元素使用其复制构造函数。
The constructor from size_type just calls C's constructor once and then uses its copy constructor for the rest of the elements.
自 C++11
以来不正确。看看std::vector::vector documentation:
...
vector( size_type count, const T& value, const Allocator& alloc = Allocator()); (2)
explicit vector( size_type count, const Allocator& alloc = Allocator() ); (3)
...
然后:
...
2) Constructs the container with count copies of elements with value value.
3) Constructs the container with count default-inserted instances of T. No copies are made.
...
所以你需要第三个构造函数std::vector<C>(size)
似乎这种行为仅在 c++11
.
我在 c++11
之前找不到这样做的方法。由于没有构造函数可以执行此操作,因此可以选择创建一个空向量,保留然后 emplace_back
个元素。但是 emplace_back
是因为 c++11
所以...我们回到原点。
只需这样做:
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