问题标签 [boost-multi-array]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
787 浏览

c++ - 将 boost 的 multi_array 和 optional 与 C++11 unique_ptr 混合不起作用

我已经用 G++ 4.7 组合了一个最前沿的设置(尽管目前我仍在使用sudo apt-get boost-all-devDebian Wheezy 附带的 boost 1.48)。

我的代码设置在要使用的逻辑数据结构是 unique_ptr 的多维数组的地方。但是multi_array,如果其中有一个 unique_ptr ,似乎甚至无法构造一个空的单元素数组。因此这是有效的:

但这不会:

我想编译器的相关抱怨是:

/usr/include/c++/4.7/bits/stl_uninitialized.h:225: 来自 'void std::uninitialized_fill_n(_ForwardIterator, _Size, const _Tp&) [with _ForwardIterator = std::unique_ptr*; _Size = 无符号整数;_Tp = std::unique_ptr]'</p>

optional< unique_ptr<...> >即使我应用了此处提供的补丁,我也遇到了一些问题:

https://svn.boost.org/trac/boost/ticket/1841

(注意:通过Is it possible to move a boost::optional 找到的?

例如:

我觉得我在做的事情是合法的。事实上,通过将 unique_ptr 合并到这个项目中,我已经在所有权转移语义方面发现了一些错误。所以我不想说“哦,这太复杂了,只需使用原始指针”

这是否在 boost 的议程上支持?有时间表吗?在此期间我可以使用任何简单的解决方法吗?

0 投票
1 回答
335 浏览

c++ - 为什么`boost::multi_array_ref`的析构函数是非虚拟的?

和之间const_multi_array_ref的关系如下:multi_array_refmulti_array

  • multi_array_ref来源于const_multi_array_ref
  • multi_array来源于multi_arry_ref

但是, 和 的析构函数const_multi_array_ref是非multi_array_ref虚拟的。事实上,它们没有明确实现的析构函数。只有multi_array一个。这是否意味着不建议使用以下用法?

如果是这样,为什么?

0 投票
1 回答
294 浏览

c++ - 为什么 boost::multi_array 的 ConstMultiArrayConcept 有一个 NumDims 模板参数?

我编写了一个operator<<专门处理boost::multi_array, 并使用ConstMultiArrayConcept它,以便它可以在外部数组和子数组上工作。不过,我想知道为什么这些multi_array概念有一个std::size_t NumDims模板参数,因为它可以简单地从multi_array. NumDimsin的唯一用途ConstMultiArrayConcept是作为 的递归深度参数idgen_helper,用于测试切片。

multi_array作为参考,这里是概念 的标题:http: //www.boost.org/doc/libs/1_51_0/boost/multi_array/concept_checks.hpp

这是我的超载operator<<

这种专业化工作,但我必须在我的理解中遗漏一些东西。任何线索将不胜感激。

0 投票
1 回答
1297 浏览

c++ - 指向动态分配的 boost multi_array 中的类的指针,而不是编译

我对使用 Boost 的 C++ 很陌生。

我想要一个“world”类的对象有一个名为“chunk”的“octreenode”类型的数组。以前我有一个普通的一维数组,这很好用。现在我正在尝试使用具有 Boost 的 multi_array 功能的 3D 数组,但我真的不确定自己做错了什么。

简化代码:

之后,如果我尝试分配

根->行星[0]->块[0][0][0]->材料= 4;

我得到错误:

“octreenode”具有相关的构造函数,并且这一行的语法与之前相同:

根->行星[0]->块[0]->材料=4;

(使用一维数组)。同样,虽然它使用一维数组编译得很好,但试图将块传递给期望指向“octreenode”对象的指针的函数,例如:

compactoctree(root->planet[p]->chunk[cz][cx][cy], 0, 14);

产生错误

非常感谢您的任何建议,我确定我遗漏了一些明显的东西。

0 投票
1 回答
371 浏览

c++ - 迭代 Boost multi_array 视图

有没有办法将视图的所有元素迭代到 Boost 中multi_array?很清楚如何迭代 Boost multi_array;即,越过范围[array.data(), array.data() + array.num_elements())。但是如果我在这个数组中创建一个视图(删除数组的某个子集),显然使用指针进行连续访问是不可能的:视图不会对应于任何连续的内存块。Boost 是否提供了一种机制来处理这个问题,还是我需要手动实现一个解决方案?

0 投票
1 回答
325 浏览

c++ - boost::multi_array 生成器上的编译错误

据说如果我们想更有效地使用multi_array,我们最好使用multi_array builder。但是,我对模板和 boost 都很陌生,我试图从书中复制一些代码。它看起来像这样:

但是,当我尝试在这样的代码中使用它时:

编译器生成以下错误:

有人可以告诉我如何解决这些错误吗?

0 投票
3 回答
585 浏览

c++ - 使用 C++ 中类构造函数的参数初始化公共属性

我在 .cpp 文件中实现了一个类,如下所示:

并在头 .h 文件中定义如下:

我的问题是当我从 main.cpp 调用它时,属性 PoreNetwork::Radiuses 和 PoreNetwork::States 似乎没有被初始化。

据我了解,我的 .cpp 中的半径和状态不是我的头文件中定义的,因为我重新定义了它们。

我的问题是:我如何在我的类中定义和初始化这两个属性,知道它们是 Boost::multi_array 并且它们的构造函数将我的类构造函数也接受的参数作为输入。

即:我的 PoreNetwork 类的构造函数采用 1 个参数 esize,它是一个 int,这也是其属性 Radiuses 和 States 的构造函数的参数。

0 投票
1 回答
532 浏览

c++ - C++:如何拥有一个 boost::multi_array 数组

嗨,我有一些 boost::multi_array 定义如下:

我正在尝试创建一个region_prior_integral_image类似以下的数组:

但是程序以以下内容终止:SemanticTextonForest: /home/aly/libs/boost_1_51_0/stage/include/boost/multi_array/multi_array_ref.hpp:488: boost::multi_array_ref<T, NumDims>& boost::multi_array_ref<T, NumDims>::operator=(const ConstMultiArray&) [with ConstMultiArray = boost::multi_array<double, 3ul>, T = double, long unsigned int NumDims = 3ul, boost::multi_array_ref<T, NumDims> = boost::multi_array_ref<double, 3ul>]: Assertionstd::equal(other.shape(),other.shape()+this->num_dimensions(), this->shape())' failed.`

我不知道为什么?

我知道我可以只使用一个向量,但为了论证,可以说我想要一个 region_prior_integral_images 数组

谢谢

0 投票
1 回答
181 浏览

boost - 无法初始化 boost::multi_array除非 T 有无参数构造函数

似乎boost::multi_array<T, n>需要T有一个无参数的构造函数。考虑以下示例。

这会导致编译错误。

问题是,当复制构造函数boost::multi_array<T,n>尝试为复制分配空间时,它会尝试调用T(). 当然,我可以在我的类中添加一个无参数构造函数。但是,如果我有一个无参数构造函数没有意义的类怎么办?

当 T 没有无参数构造函数时,是否有一种简单的方法来使用 boost::multi_array ?

0 投票
1 回答
1078 浏览

c++ - 如何将 boost::multi_array 保存到文件中

我正在寻找一种简单的方法来保存和从文件中加载 3D boost::multi_array。据我所知,Boost 库中没有我觉得奇怪的方法。

我不需要该文件是人类可读的,因此二进制文件会更好地提高性能。谁能指点我一个现成的解决方案或给我有关如何实现此类读/写方法的想法?

我使用 bool 和 ints 类型的 3D multi_arrays,所以我需要使用模板。