c – 为什么采用迭代器的构造函数需要元素为EmplaceConstructible?

  • 内容
  • 相关
小蓝博客收集整理的这篇文章主要介绍了c – 为什么采用迭代器的构造函数需要元素为EmplaceConstructible?,小蓝博客小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经在标准(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));

总结

以上是小蓝博客为你收集整理的c – 为什么采用迭代器的构造函数需要元素为EmplaceConstructible?全部内容,希望文章能够帮你解决c – 为什么采用迭代器的构造函数需要元素为EmplaceConstructible?所遇到的程序开发问题。

如果觉得小蓝博客网站内容还不错,欢迎将小蓝博客网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 打赏支付宝扫一扫
  • 打赏微信扫一扫
  • 打赏企鹅扫一扫

本文标签:

版权声明:若无特殊注明,本文皆为《小蓝博客》原创,转载请保留文章出处。

本文链接:c – 为什么采用迭代器的构造函数需要元素为EmplaceConstructible? - https://www.nswin.cc/31386.html