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 中的声明是否没有合适的迭代器类型?

But what is the type of those iterators

未指定类型。

(so that I can declare them properly)?

您可以使用 decltype:

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

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

auto iter = std::begin(ar);