小编Tob*_*zel的帖子

增加'蒙面'位集

我目前正在编写一个树枚举器,我遇到了以下问题:

我正在查看屏蔽的位集,即位集,其中设置位是掩码的子集,即0000101使用掩码1010101.我想要完成的是增加位集,但仅限于屏蔽位.在这个例子中,结果将是0010000.为了使它更清晰一点,只提取掩码位,0011即将0100它们递增并再次分配给掩码位,给出0010000.

有没有人看到一种有效的方法来做到这一点,没有使用bitcans和前缀掩码的组合手动实现操作?

c c++ bit-manipulation intrinsics

78
推荐指数
3
解决办法
3415
查看次数

保存RecyclerView状态的最佳方法是什么?

我的片段包含主要活动中的recyclerview

Fragment.java

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle   savedInstanceState) {
    super.onCreate(savedInstanceState);
    View view  = inflater.inflate(R.layout.activity_main, container, false);
    initInstances(view);
    setRetainInstance(true);
    return view;
}

private void initInstances(View view) {
    mRecyclerView = (RecyclerView) view.findViewById(R.id.dialogList);
    mLayoutManager = new LinearLayoutManager(getActivity());
    mRecyclerView.setLayoutManager(mLayoutManager);
    adapter = new MyAdapter(items);
    mRecyclerView.setAdapter(mAdapter);
}
Run Code Online (Sandbox Code Playgroud)

MainActivity.java

在onCreate方法中:

myFragment = (MyFragment) getSupportFragmentManager().findFragmentByTag(MyFragment.TAG);
if (MyFragment == null) {
    MyFragment = new MyFragment();
    getSupportFragmentManager().beginTransaction().add(R.id.content_frame,
            myFragment, MyFragment.TAG).commit();
}
Run Code Online (Sandbox Code Playgroud)

但是当方向改变时,我的RecyclerView会重新绘制.

我已尝试使用覆盖保存状态,onSaveInstanceState并且onRestoreInstanceState像这样如何防止自定义视图在屏幕方向更改丢失状态保存和恢复视图状态android,但对我无效

如何在方向改变时正确保存RecyclerView和适配器项目的状态?

解决方案: 我的片段使用一些方法从BaseFragment扩展: …

android android-fragments android-recyclerview

10
推荐指数
1
解决办法
1万
查看次数

仅限调试的成员

是否有一种很好的方法可以将某些成员仅包含在程序的调试版本中?

我有一个索引数据结构,我使用了大量的实例,如果数据结构的某些内容发生了变化,它会带有一定的状态标志,但索引还没有更新.
状态标志仅用于检查索引的所有使用是否update在数据已更改的情况下调用功能,但出于性能和存储原因,由于存在大量实例且数据结构在update调用之前可能会进行大量更改,我想保留这些数据仅用于调试版本.

这些标志基本上有两种类型的操作:

  • 设置/重置标志
  • assert标志未设置,即索引的某些部分仍然有效.

有没有更好的方法来实现这一点,而不是使用#ifndef NDEBUG语句来填充我的代码?

注意:在我的特殊用例中,性能损失可能不是那么大,但我仍然在寻找一种通用方法来解决这个问题,因为对于同样的想法可能有更复杂的用例.

c++

10
推荐指数
1
解决办法
232
查看次数

将行添加到空的2D NumPy数组

我想从一个空的2D NumPy数组开始,然后添加一些行.但是,到目前为止,我只能用一维数组做到这一点.这是我到目前为止所尝试的:

a = numpy.array([])
a = numpy.append(a, [1, 2])
a = numpy.append(a, [8, 8])
print a
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

[1, 2, 8, 8]
Run Code Online (Sandbox Code Playgroud)

而我希望输出为:

[[1, 2], [8, 8]]
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

python numpy

4
推荐指数
2
解决办法
4353
查看次数

生成前缀位掩码

我正在寻找一种可移植的方法来生成前缀位掩码,该前缀位掩码的第一位n设置为0 <= n <= 32(或 64 或任意整数类型位宽度)。

例子:

prefix_bitmask(0)  = 0b00000000000000000000000000000000u
prefix_bitmask(4)  = 0b00000000000000000000000000001111u
prefix_bitmask(32) = 0b11111111111111111111111111111111u
Run Code Online (Sandbox Code Playgroud)

n == 0如果我们忽略这些情况或,有两种方法可以实现这一点n == 32

prefix_bitmask(0)  = 0b00000000000000000000000000000000u
prefix_bitmask(4)  = 0b00000000000000000000000000001111u
prefix_bitmask(32) = 0b11111111111111111111111111111111u
Run Code Online (Sandbox Code Playgroud)

prefix_mask132 失败和prefix_mask20 失败,两者都是因为大于整数类型的移位是未定义的行为(因为允许 CPU 仅使用移位大小的最低 5 位)。

有没有一种“规范”的方法可以在不分支的情况下解决这个问题?

c c++ bit-manipulation undefined-behavior branchless

4
推荐指数
1
解决办法
292
查看次数

逗号初始化和构造函数C++和Eigen

我在C++中使用Eigen库,我试图找到矩阵的行列式.根据我如何初始化矩阵,我会得到不同的结果.

方法一:

MatrixXd a(3, 3);
for (int n = 0; n < 3; n++)
    for (int m = 0; m < 3; m++)
        a(n,m) = (double) (n + m*m + 2.5)/3;

cout << "Matrix a: " << endl;
cout << a << endl;
cout << "Determinat of matrix a is: " << a.determinant() << endl;
Run Code Online (Sandbox Code Playgroud)

这部分代码打印出来

Matrix a:
0.8333333  1.166667  2.166667
1.166667       1.5       2.5
1.5  1.833333  2.833333
Determinat of matrix a is: -7.401487e-17
Run Code Online (Sandbox Code Playgroud)

方法二:

MatrixXd b(3, 3);
b << 0.8333333, …
Run Code Online (Sandbox Code Playgroud)

c++ matrix eigen

3
推荐指数
1
解决办法
264
查看次数