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);
因为 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);