1

boost::multi_arrayreshape() 函数的复杂度是多少?我希望它是 O(1) 但我在文档中找不到此信息。这个库的文档实际上非常稀缺。

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

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

4

1 回答 1

1

下面是文件中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与数组大小相关的对象中的元素。该函数在扩展中的元素数量上是线性的。但我认为它的复杂性在数组中的元素总数中是恒定的。

于 2014-09-18T22:26:21.107 回答