问题标签 [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.
c++ - 将 boost 的 multi_array 和 optional 与 C++11 unique_ptr 混合不起作用
我已经用 G++ 4.7 组合了一个最前沿的设置(尽管目前我仍在使用sudo apt-get boost-all-dev
Debian 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 的议程上支持?有时间表吗?在此期间我可以使用任何简单的解决方法吗?
c++ - 为什么`boost::multi_array_ref`的析构函数是非虚拟的?
和之间const_multi_array_ref
的关系如下:multi_array_ref
multi_array
multi_array_ref
来源于const_multi_array_ref
multi_array
来源于multi_arry_ref
但是, 和 的析构函数const_multi_array_ref
是非multi_array_ref
虚拟的。事实上,它们没有明确实现的析构函数。只有multi_array
一个。这是否意味着不建议使用以下用法?
如果是这样,为什么?
c++ - 为什么 boost::multi_array 的 ConstMultiArrayConcept 有一个 NumDims 模板参数?
我编写了一个operator<<
专门处理boost::multi_array
, 并使用ConstMultiArrayConcept
它,以便它可以在外部数组和子数组上工作。不过,我想知道为什么这些multi_array
概念有一个std::size_t NumDims
模板参数,因为它可以简单地从multi_array
. NumDims
in的唯一用途ConstMultiArrayConcept
是作为 的递归深度参数idgen_helper
,用于测试切片。
multi_array
作为参考,这里是概念
的标题:http: //www.boost.org/doc/libs/1_51_0/boost/multi_array/concept_checks.hpp
这是我的超载operator<<
这种专业化工作,但我必须在我的理解中遗漏一些东西。任何线索将不胜感激。
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);
产生错误
非常感谢您的任何建议,我确定我遗漏了一些明显的东西。
c++ - 迭代 Boost multi_array 视图
有没有办法将视图的所有元素迭代到 Boost 中multi_array
?很清楚如何迭代 Boost multi_array
;即,越过范围[array.data(), array.data() + array.num_elements())
。但是如果我在这个数组中创建一个视图(删除数组的某个子集),显然使用指针进行连续访问是不可能的:视图不会对应于任何连续的内存块。Boost 是否提供了一种机制来处理这个问题,还是我需要手动实现一个解决方案?
c++ - boost::multi_array 生成器上的编译错误
据说如果我们想更有效地使用multi_array,我们最好使用multi_array builder。但是,我对模板和 boost 都很陌生,我试图从书中复制一些代码。它看起来像这样:
但是,当我尝试在这样的代码中使用它时:
编译器生成以下错误:
有人可以告诉我如何解决这些错误吗?
c++ - 使用 C++ 中类构造函数的参数初始化公共属性
我在 .cpp 文件中实现了一个类,如下所示:
并在头 .h 文件中定义如下:
我的问题是当我从 main.cpp 调用它时,属性 PoreNetwork::Radiuses 和 PoreNetwork::States 似乎没有被初始化。
据我了解,我的 .cpp 中的半径和状态不是我的头文件中定义的,因为我重新定义了它们。
我的问题是:我如何在我的类中定义和初始化这两个属性,知道它们是 Boost::multi_array 并且它们的构造函数将我的类构造函数也接受的参数作为输入。
即:我的 PoreNetwork 类的构造函数采用 1 个参数 esize,它是一个 int,这也是其属性 Radiuses 和 States 的构造函数的参数。
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>]: Assertion
std::equal(other.shape(),other.shape()+this->num_dimensions(), this->shape())' failed.`
我不知道为什么?
我知道我可以只使用一个向量,但为了论证,可以说我想要一个 region_prior_integral_images 数组
谢谢
boost - 无法初始化 boost::multi_array除非 T 有无参数构造函数
似乎boost::multi_array<T, n>
需要T
有一个无参数的构造函数。考虑以下示例。
这会导致编译错误。
问题是,当复制构造函数boost::multi_array<T,n>
尝试为复制分配空间时,它会尝试调用T()
. 当然,我可以在我的类中添加一个无参数构造函数。但是,如果我有一个无参数构造函数没有意义的类怎么办?
当 T 没有无参数构造函数时,是否有一种简单的方法来使用 boost::multi_array ?
c++ - 如何将 boost::multi_array 保存到文件中
我正在寻找一种简单的方法来保存和从文件中加载 3D boost::multi_array。据我所知,Boost 库中没有我觉得奇怪的方法。
我不需要该文件是人类可读的,因此二进制文件会更好地提高性能。谁能指点我一个现成的解决方案或给我有关如何实现此类读/写方法的想法?
我使用 bool 和 ints 类型的 3D multi_arrays,所以我需要使用模板。