c – 为什么采用迭代器的构造函数需要元素为EmplaceConstructibl
发布时间:2020-12-16 10:00:45 所属栏目:百科 来源:网络整理
导读:我已经在标准(n4296),23.2.3 / 4(表100)中看到了对序列stl容器的要求,并且读过一个带有参数迭代器的构造函数(X – 容器,i和j – 输入迭代器) X(i,j)X a(i,j) 要求容器的元素类型为EmplaceConstructible. Requires: T shall be EmplaceConstructible into X f
我已经在标准(n4296),23.2.3 / 4(表100)中看到了对序列stl容器的要求,并且读过一个带有参数迭代器的构造函数(X – 容器,i和j – 输入迭代器)
X(i,j) X a(i,j) 要求容器的元素类型为EmplaceConstructible. Requires: T shall be EmplaceConstructible into X from *i 我认为构造函数可以通过为范围中的每个迭代器调用std :: allocator_traits :: construct(m,p,* it)方法来实现(其中m – 类型A的分配器,p – 指向内存的指针,它 – 迭代器in [i; j),并且只需要CopyInsertable元素的概念,因为只提供一个参数用于复制/移动,而EmplaceConstructible概念要求元素由一组参数构造.这个决定有什么理由吗? 解决方法
CopyInsertable是一个二进制概念 – 给定一个容器X它适用于单个类型T,它需要有一个复制构造函数.但是,* i被允许与T不同,只要有一种方法(隐式)从* i构造T:
char s[] = "hello world!"; std::vector<int> v(std::begin(s),std::end(s)); // int is EmplaceConstructible from char 一个(人为的)示例,其中T不是CopyInsertable: struct nocopy { nocopy(int) {} nocopy(nocopy const&) = delete; nocopy(nocopy&&) = delete; }; int a[]{1,2,3}; std::vector<nocopy> v(std::begin(a),std::end(a)); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |