繁体   English   中英

std::valarray 和迭代器的类型

[英]std::valarray and type of iterators

自 C++11 起, std::valarray具有迭代器,通过std::begin()std::end()接口提供。 但是这些迭代器的类型是什么(以便我可以正确地声明它们)?

以下代码不会no template named 'iterator' in 'valarray<_Tp>'进行编译:

template <typename T>
class A {
private:
  std::valarray<T> ar;
  std::valarray<T>::iterator iter;
public:
  A() : ar{}, iter{std::begin(ar)} {}
};

decltype显示迭代器的类型是指向“valarray”元素的指针。 实际上,以下内容确实可以编译并且似乎可以正常工作:

template <typename T>
class A {
private:
  std::valarray<T> ar;
  T* iter;
public:
  A() : ar{}, iter{std::begin(ar)} {}
};

我错过了什么? class 中的声明是否没有合适的迭代器类型?

但是那些迭代器的类型是什么

类型未指定。

(这样我就可以正确地声明它们)?

您可以使用 decltype:

using It = decltype(std::begin(ar));
It iter;

或者,在可能的情况下(不是成员变量),您应该更喜欢类型推导:

auto iter = std::begin(ar);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM