在我的代码中,我需要考虑一个由内部数组组成的数组,其中内部数组具有固定的维度。为了利用STL算法,实际上将数据存储为数组是有用的,但我还需要将该数据传递给一个接受扁平化C样式数组的C库。
很好能够便宜且可移植地转换(即扁平化)多维数组。我将坚持非常简单的情况,实际问题更加普遍。
很好能够便宜且可移植地转换(即扁平化)多维数组。我将坚持非常简单的情况,实际问题更加普遍。
struct my_inner_array { int data[3]; };
std::vector<my_inner_array> x(15);
Is
&(x[0].data[0])
这段代码指向一个连续的内存块,大小为45*sizeof(int),包含与x相同的条目。我需要担心内存对齐吗?我担心这个方法只适用于特定的数据类型和内部数组大小,而不是可移植的。
- 这段代码是否可移植?
- 如果不可移植,有没有办法使其工作?
- 如果不能,您有什么建议可以做到这一点?
- 如果my_inner_array不是一个POD结构体,但包含一些方法(只要类不包含任何虚方法),这是否会改变任何东西?
std::transform(coord.begin(), coord.end(), values.begin(), adapt(f))
其中adapt(f)
返回一个函数对象,该函数对象获取元素范围的开始和结束部分,并将它们提供给f
(假设它可以编写为使用迭代器对而不仅仅是数组)。或者你可以编写一个通用的f
来处理它本身。如果使用类似 Boost.Range 的东西,则也不需要adapt
步骤。 - Luc Danton