迭代器到不同大小的数组

fre*_*low 5 c++ arrays templates iterator c++11

以下代码在我的系统上编译正常:

#include <array>
#include <type_traits>

static_assert(std::is_same<std::array<int, 5>::iterator,
                           std::array<int, 7>::iterator>::value, ":(");
Run Code Online (Sandbox Code Playgroud)

标准是否保证了这种行为?迭代器类型是否与数组大小无关?

如果有保证,有没有办法从元素类型中抽象并忽略大小?

template<typename T, size_t n>
void foobar(std::array<T, n>::iterator it)
Run Code Online (Sandbox Code Playgroud)

也就是说,有没有办法在不提及大小的情况下编写上面特定于数组的代码n

请注意,我不想诉诸T*,即使在发布模式下迭代器可能是一个T*.

Pet*_*ker 3

不,这不能保证。每个数组类型array<T, size_t>都有一个名为 typedef 的嵌套成员,iterator其类型是实现定义的。