下面是文件中reshape
函数的实现。multi_array_ref.hpp
template <typename SizeList>
void reshape(const SizeList& extents) {
boost::function_requires<
CollectionConcept<SizeList> >();
BOOST_ASSERT(num_elements_ ==
std::accumulate(extents.begin(),extents.end(),
size_type(1),std::multiplies<size_type>()));
std::copy(extents.begin(),extents.end(),extent_list_.begin());
this->compute_strides(stride_list_,extent_list_,storage_);
origin_offset_ =
this->calculate_origin_offset(stride_list_,extent_list_,
storage_,index_base_list_);
}
看起来该函数只是重新索引extents
与数组大小相关的对象中的元素。该函数在扩展中的元素数量上是线性的。但我认为它的复杂性在数组中的元素总数中是恒定的。