- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我有一个 N 维 boost::multi_array(为简单起见,类型为 int),其中 N
在编译时已知,但可以变化(即是一个非类型模板参数).我们假设所有维度的大小都相同 m
。
typedef boost::multi_array<int, N> tDataArray;
boost::array<tDataArray::index, N> shape;
shape.fill(m);
tDataArray A(shape);
现在我想遍历 A
中的所有条目,例如打印它们。例如,如果 N 是 2,我想我会写这样的东西
boost::array<tDataArray::index, 2> index;
for ( int i = 0; i < m; i++ )
{
for ( int j = 0; j < m; j++ )
{
index = {{ i, j }};
cout << A ( index ) << endl;
}
}
我使用了一个索引对象来访问元素,因为我认为这比这里的 []-operator 更灵活。
但是我怎么能在不知道维数 N
的情况下写这个呢。有什么内置的方法吗? multi_array 的文档对于存在哪些类型的迭代器等不是很清楚。或者我是否必须求助于一些带有自定义指针的自定义方法,从指针计算索引等?如果是这样 - 对这种算法的外观有何建议?
最佳答案
好的,基于 Google groups discussion已经在其中一条评论和 one of the examples 上提到过从库本身,这里有一个可能的解决方案,它可以让你在一个循环中遍历多数组中的所有值并且提供了一种方法来检索每个元素的索引(如果这个在我的场景中需要其他一些东西)。
#include <iostream>
#include <boost/multi_array.hpp>
#include <boost/array.hpp>
const unsigned short int DIM = 3;
typedef double tValue;
typedef boost::multi_array<tValue,DIM> tArray;
typedef tArray::index tIndex;
typedef boost::array<tIndex, DIM> tIndexArray;
tIndex getIndex(const tArray& m, const tValue* requestedElement, const unsigned short int direction)
{
int offset = requestedElement - m.origin();
return(offset / m.strides()[direction] % m.shape()[direction] + m.index_bases()[direction]);
}
tIndexArray getIndexArray( const tArray& m, const tValue* requestedElement )
{
tIndexArray _index;
for ( unsigned int dir = 0; dir < DIM; dir++ )
{
_index[dir] = getIndex( m, requestedElement, dir );
}
return _index;
}
int main()
{
double* exampleData = new double[24];
for ( int i = 0; i < 24; i++ ) { exampleData[i] = i; }
tArray A( boost::extents[2][3][4] );
A.assign(exampleData,exampleData+24);
tValue* p = A.data();
tIndexArray index;
for ( int i = 0; i < A.num_elements(); i++ )
{
index = getIndexArray( A, p );
std::cout << index[0] << " " << index[1] << " " << index[2] << " value = " << A(index) << " check = " << *p << std::endl;
++p;
}
return 0;
}
输出应该是
0 0 0 value = 0 check = 0
0 0 1 value = 1 check = 1
0 0 2 value = 2 check = 2
0 0 3 value = 3 check = 3
0 1 0 value = 4 check = 4
0 1 1 value = 5 check = 5
0 1 2 value = 6 check = 6
0 1 3 value = 7 check = 7
0 2 0 value = 8 check = 8
0 2 1 value = 9 check = 9
0 2 2 value = 10 check = 10
0 2 3 value = 11 check = 11
1 0 0 value = 12 check = 12
1 0 1 value = 13 check = 13
1 0 2 value = 14 check = 14
1 0 3 value = 15 check = 15
1 1 0 value = 16 check = 16
1 1 1 value = 17 check = 17
1 1 2 value = 18 check = 18
1 1 3 value = 19 check = 19
1 2 0 value = 20 check = 20
1 2 1 value = 21 check = 21
1 2 2 value = 22 check = 22
1 2 3 value = 23 check = 23
所以内存布局从外部索引到内部索引。请注意,getIndex
函数依赖于 boost::multi_array 提供的默认内存布局。如果阵列基础或存储顺序发生变化,则必须进行调整。
关于c++ - boost::multi_array 上的维度无关循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9789560/
假设我们要描述一个满足以下真值表的组合电路: a b | s0 s1 s2 s3 ----------------- 0 0 | 1 d d d 0 1 | 0 1 d d 1 0 |
.mainIDv { height:300px; width:400px; padding:5px; margin: 8px auto 8px auto; } .ImgDisp{
我的 iOS 应用程序遇到了一个恼人的问题。突然,当我启动带有 TableView 的 View Controller 时,出现以下错误: Unrecognized selector sent to
我有一个简单的 PreferenceActivity 类,它的 onCreate 将我的 R.xml.preferences 屏幕传递给 ((PreferenceActivity)super).add
在大学项目范围内,我应该实现数据库的聚合。 我得到了一个实体关系模型,它看起来与此类似: 现在我应该实现一个 SQL 脚本来创建这样的数据库,但我在谷歌或其他任何地方找不到有关此主题的任何内容。在我教
我一直在努力阅读 GCD 并试图弄明白。我读了很多地方,应该始终使用 GCD,如果一个人正在做一些繁重的工作,这会卡住 UI,我确实理解这一点,但是 GCD 也可以仅仅为了性能而使用吗?假设我有一个循
当有人用他们自己的类重载线程时,这个问题似乎已经以一种或另一种形式得到了回答,但是如果只是尝试使用 QTimer 类而不扩展 QThread 类呢?我正在尝试将 QTimer 用于 QT。他们在 上的
在网上看了类似的问题/错误,没有一个对我有帮助... 未处理的拒绝 SequelizeEagerLoadingError:任务未关联到用户! 我的用户路线 router.get('', functio
如果我正在评估两个变量而不是两个方法调用,那么我使用“&&”或“&”是否重要 //some logic that sets bool values boolean X = true; boolean
我们目前正在内部为我们的项目使用 Oracle 10g,这不太可能改变,但最终我们将向其他客户提供此应用程序,我们需要能够提出替代的免费数据库。 那么使 Hibernate 持久层独立于所使用的底层
我的 AsyncTask 类中的 onPostExecute() 方法有问题。 我有一个SignupActivity: public class SignupActivity extends AppC
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我一直在大量关注 sequelize 的文档,但在处理关系时遇到了问题。这是我使用 belongsTo 创建两个非常基本的 1:1 关系的非常简单的代码 import Sequelize, { STR
我希望这与 GMT 无关,否则我会觉得自己很愚蠢。 2 个快速相关的问题。为什么这会转换为不同的日期?正在失去一天。我查看了其他答案中所述的时区,但它始终是 GMT 时区 0000,这正是我所期望的。
我发现了这个问题的很多版本,但似乎都没有比明显的 Google Chrome 错误更进一步。 发生的情况是,每当我将 codeigniter 设置复制到服务器上的新文件夹,以基于它启动新项目时,我在尝
我需要一个与 UI 无关的简单布局管理器。通过这个,我的意思是它不应该指定我想如何在屏幕上表示我的形状/控件。它应该能让我说: 我想要 X 形状。我想要 X 形下的 Y 形。我希望形状 Z 包围 X,
当有一个方法== , 方法 !=被定义为采用该结果并应用 !给它。 (可能还有 =~ 和 !~ 。) 与此不同,>= , 通常表示 >或 == , 实际上独立于 >和 == .这两个定义似乎都不会影响
我在 Ruby Netbeans 6.5.1 中获得了大量(我称之为)无关的自动完成信息。 例如,如果我输入一个模型对象的名称,然后输入一个句点(无论我是在 Controller 中还是在 View
我是 NodeJS 的新手,有 express 和 Sequelize。当我想创建图书租赁时,控制台会提示我“图书与租赁无关”。 当我将表迁移到 sql 数据库时,id 就在它们的位置并且我的播种机正
我有众所周知的错误: implicit declaration of function 'STLINKReadSytemCalls' [-Wimplicit-function-declaration]
我是一名优秀的程序员,十分优秀!