【问题标题】:iterator type for primitive type arrays基本类型数组的迭代器类型
【发布时间】:2012-08-22 09:42:54
【问题描述】:

std::copy<InputInterator, OutputIterator>( /*...*/ );

如何确定双精度数组double d[] 的InputInterator 和OutputIterator 类型?有没有某种iterator_traits<double*>::iterator_type?

upd:我使用非常旧的编译器,所以我需要显式实例化

【问题讨论】:

  • 我想你的意思是你需要明确的实例化。

标签: c++ templates iterator c++builder typetraits


【解决方案1】:

为什么需要这个? copy 是一个函数,所以,简单地使用

std::copy(d, d + size, d);

这个调用会自动推导出参数的类型。

此外,还有std::iterator_traits<T*>::pointer,将double* 评估为double*,您可以简单地使用

std::copy<double*, double*>(d, d + size, d);

如果你愿意。

【讨论】:

  • 因为我用的是很老的编译器
  • @fogbit:别再用这种野兽了。
  • @fogbit:这样的编译器必须超过 10 年。那是什么,TC3.1?大约十年前,该项目应该不被重写,而是移植到现代编译器。进一步拖延只会增加痛苦。
  • @fogbit:是的,BCB 总是有明显的模板错误。 耸耸肩。(应该是 const double*, double*,顺便说一句。注意第二个 *。)从 BCB 迁移出去。如果你的老板不想要这个,那就离开那个老板。
  • std::iterator_traits<Iter>::pointer 指定it-> 的返回类型(其中it 的类型为Iter)。它不是传递给std::copy 的合适类型(尽管在这种情况下它恰好可以工作)。在std::iterator_traits<T*>中,指定迭代器的类型是……T*,std::iterator_traits的模板参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-12
  • 2014-03-21
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
相关资源
最近更新 更多