- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我使用来自 STL 的 bitset 或来自 boost 的 dynamic_bitset<> 的位表示映射(矩阵行 x 列)(我可以使用任何我想要的)。我需要获得该矩阵的较小尺寸的子矩阵(例如a(2,2) a(2,3) a(3,2) a(3,3) 大小为 2 )。是否有任何有效的结构来用位表示矩阵并从起始索引和长度获取子矩阵而无需迭代?
最佳答案
可以在矩阵和子矩阵之间有效地共享数据。诀窍是跟踪类(class)中的三个变量。
data
需要是一个类似shared_ptr
的结构,以便在您使用完后可以销毁底层数据。 start
将是指向由 data
引用的数据的指针,row_stride
告诉您移动多远才能到达下一行。
您可能想跟踪的其他内容是
这是寻找非基于位的方法的方法(我省略了很多……但希望您能理解要点)。
template<typename T>
struct MatrixData
{
T * data;
explicit MatrixData( size_t N ) { new T[N]; }
~MatrixData() { delete [] data; }
private:
MatrixData( const MatrixData & );
MatrixData& operator=( const MatrixData & );
};
template<typename T>
class Matrix
{
Matrix(size_t nni, size_t nnj) :
data( new MatrixData( nni*nnj ) ),
ni(nni),
nj(nnj),
row_stride(ni),
col_stride(1)
{
}
T operator()( size_t i, size_t j)
{
assert( i < ni );
assert( j < nj );
return start + i * col_stride + j * row_stride;
}
Matrix submatrix( size_t i_start, size_t j_start, size_t new_ni, size_t new_nj )
{
assert( i_start + new_ni < ni );
assert( j_start + new_nj < nj );
Matrix retval(*this);
retval.start += i_start * col_stride + j_start * row_stride;
retval.ni = new_ni;
retval.nj = new_nj;
return retval;
}
Matrix transpose()
{
Matrix retval(*this);
std::swap(retval.ni,retval.nj);
std::swap(retval.row_stride,retval.col_stride);
}
private:
shared_ptr<MatrixData> data;
T* start;
size_t ni;
size_t nj;
size_t row_stride;
size_t col_stride;
};
使这项工作适用于基于位的版本将意味着更改 MatrixData
以包含一个基于 bot 的结构,将 start
更改为结构的索引并更改您的 operator()
才能正确访问数据。
关于c++ - 获取尺寸较小的矩阵的子矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11221660/
是否可以告诉hive某个表“很小”,即应将其复制到所有节点并在RAM中进行操作? 最佳答案 尝试以下提示: /*+ MAPJOIN(small_table) */ UPDATE 顺便说一句,还有其他
给定的是一个大(但不是巨大)的字符串数组(数量为 1000-5000 个单个字符串)。我想对这些字符串执行一些计算和其他操作。因为在处理那个大数组时它总是停止工作,所以我重写了我的函数以递归地获取较小
当我在大小为 (640,480) 的 JFrame 中添加 JPanel 时,JPanel 的大小为 (638449)。我需要 JPanel 与 JFrame 完全匹配! 我发现的一个临时解决方法是将
我目前正在尝试响应设计。我需要在父 div 变小的同时保持图像居中。 见图片说明: 我不想用它作为背景。下面的代码会一直把它放在div框的左上角 #img_wrap {
当我必须捕获生成器中可能发生的异常时,如何使 try block 尽可能小? 典型的情况是这样的: for i in g(): process(i) 如果 g() 可以引发我需要捕获的异常,第一种
目前尝试让 Accordion 项目在 Bootstrap 中工作一切都很好,直到我尝试关闭所有 Accordion 菜单。突然之间,标题比未折叠时小得多。 当一个打开时 当全部关闭时 我正在使用指南
目前尝试让 Accordion 项目在 Bootstrap 中工作一切都很好,直到我尝试关闭所有 Accordion 菜单。突然之间,标题比未折叠时小得多。 当一个打开时 当全部关闭时 我正在使用指南
一个应用程序托管一个具有三个接口(interface)的 Web 服务,用于三个单独且独立的操作,所有这些操作都在应用程序的不同组件中实现,彼此独立,例如在不同的包等中,所以他们对彼此了解不多,只共享
我正在尝试使用 border-radius 属性设计一个主要内容容器具有圆 Angular 的网站。但是,我保持侧边栏和顶部导航栏固定,因此当用户向上或向下滚动时它们不会移动。它类似于在 Google
我正在构建我网站的响应式版本。 虽然我很高兴大多数 float 的 div 被迫在屏幕下方,但有一些 div 我需要保持彼此相邻,即使屏幕区域小于这些 div 的总宽度。在这种情况下,我想按比例缩小它
我正在为我的元素使用 Twitter Bootstraps 网格。我有以下 HTML: Some text Some text
我有一个小宽度的 div 并且可以看到溢出。我有一个更大的表,里面只有一个单元格和一个文本: A small text with spaces...
我有一个设计得很好的架构,其中 Controller 转到访问与数据库通信的存储库的服务。 因此, Controller 中的逻辑保持在最低限度,但我仍然有非常微妙的代码片段来执行一些任务,例如 验证
我在一个布局中有两个 View 。我将分别称它们为 View A 和 View B。 ┌──────┐ │┌─┐┌─┐│ ││A││B││ │└─┘└─┘│ └──────┘ 父布局(包括View A
整个页面的父元素是一个居中的 div,最大宽度限制为 960px。页面上的所有其他元素都是该父 div 的子元素。简化结构如下: 虽然父 div 的宽度不应超过 960px,但我
我应该链接到完整的 jQuery UI -还是-提供精简的自定义副本? 来自 Google 等 CDN 的完整 jQuery-UI 与提供定制的最小版本之间存在非常显着的大小差异。此外,还可以将 jQ
我正在尝试制作一条图像拇指的“线”,它在鼠标移动时滚动。我让它工作了,但我现在的问题是我想在侧面做一个“填充”,这样我就不必将鼠标一直拉到侧面才能看到第一个/最后一个拇指。但我真的无法让它工作:/ 这
我是一名优秀的程序员,十分优秀!