使用 C 数组,编写任何大小的数组的代码都相当容易:
void func( T* itBegin, T* itEnd );
void main() {
T arr1[1];
func( std::begin(arr1), std::end(arr1) );
T arr2[2];
func( std::begin(arr2), std::end(arr2) );
}
我怎么能用 std::arrays 做到这一点?
void func( ??? itBegin, ??? itEnd );
void main() {
std::array<T,1> arr1;
func( std::begin(arr1), std::end(arr1) );
std::array<T,2> arr2;
func( std::begin(arr2), std::end(arr2) );
}
问题是,在 MSVC 2010 中,std::array<T,N>::iterator
不同的N
. 这是 MSVC 2010 中的错误吗?如果不是,这种设计的基本原理是什么?是的,我可以从 std::array 获取指针并传递它们而不是迭代器,但这不是不必要的丑陋吗?
顺便说一句,boost::array<T,N>::iterator
所有人都一样N
。