C++ 创建大小元素的向量,而不调用复制构造函数?
有没有一种方法可以创建N个元素的向量,而不调用复制构造函数,而是调用元素的默认构造函数?我不想要元素的复制构造函数,因为应该防止复制 在这里,您似乎可以,选项3: 3) 构造带有默认插入实例计数的容器 T.未制作副本 但在这里,您似乎无法:C++ 创建大小元素的向量,而不调用复制构造函数?,c++,vector,C++,Vector,有没有一种方法可以创建N个元素的向量,而不调用复制构造函数,而是调用元素的默认构造函数?我不想要元素的复制构造函数,因为应该防止复制 在这里,您似乎可以,选项3: 3) 构造带有默认插入实例计数的容器 T.未制作副本 但在这里,您似乎无法: 空容器构造函数(默认构造函数)构造一个没有元素的空容器 fill构造函数用n个元素构造一个容器。每个元素都是val的副本(如果提供) 范围构造函数构造一个容器,其中包含的元素数量与范围[first,last]的元素数量相同,每个元素的位置都是从其 该范围
是的,这就是向量的工作原理 您误读了cplusplus.com的措辞。它说“填充构造函数用n个元素构造一个容器。每个元素都是
val
(如果提供)”的副本;您无法摆脱这一点。但您没有提供val
我们可以用以下简单的代码简单地演示,当元素默认构造时,不会(或者至少不需要)创建副本:
#include <vector>
#include <iostream>
struct T
{
T() { std::cout << "def-cons\n"; }
~T() { std::cout << "dest\n"; }
T(const T&) = delete;
};
int main()
{
std::vector<T> v(5);
}
#包括
#包括
结构T
{
{:STD::CUT< P>这取决于你使用的C++版本。在C++ 11之前,只有
将元素放入向量的方法是复制:
std::vector<T> v( 10 );
std::vectorv(10);
相当于:
std::vector<T> v( 10, T() );
向量v(10,T());
使用默认的T
复制10次。C++11更改了这一点,
第一个表单需要默认构造T
10次,
没有任何拷贝