boost::multi_array reshape()函数的复杂性

Complexity of boost::multi_array reshape() function

本文关键字:函数 复杂性 reshape multi array boost      更新时间:2023-10-16

boost::multi_array reshape()函数的复杂度是多少?我希望它是O(1),但我在文档中找不到这个信息。这个图书馆的文献资料实际上相当稀少。

我问这个问题的原因是,我想使用一个循环来迭代一个multi_array对象(我不关心数组索引)。该库似乎没有提供使用单个迭代器迭代数组的方法。因此,作为一种变通方法,我想首先沿单个维度重塑数组(其他维度设置为1)。然后我可以使用一个循环来遍历数组。然而,我不确定reshape()操作的效率有多高

因此,我的第二个问题是:有没有一种简单的方法可以使用单个循环迭代multi-array对象的所有元素?

以下是multi_array_ref.hpp文件中reshape函数的实现。

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对象中与数组大小相关联的元素重新编制索引。函数在extends中的元素数量上是线性的。但我认为它的复杂性是数组中元素总数不变的。