C++ 中的快速 where() 函数

Fast where() function in C++

我有一个用 0 和 1 填充的整数数组。我正在寻找 C/C++ 中获取 1 的位置(索引)的最快方法,类似于 numpy 中的 where() 函数。

编辑 1:因为我只存储位,所以 char 数组也可以完成这项工作。

编辑 2:示例:

char a[5];
a[0]=0;
a[1]=1;
a[2]=1;
a[3]=0;
a[4]=1;

应该return

1,2,4

数组的类型并不重要,但我必须尽快找到1s的位置。

如果你只存储位,我想你可以只使用 bool 类型,而不是 char。

const unsigned int size = 5;

bool bits[size] = {0 , 1 , 0 , 1 , 0};
std::vector<unsigned int> indices;

auto ptr = &bits[0];
for (int i = 0; i<size; i++, ptr++)
{
    if (*ptr) indices.push_back (i);    
}

如果速度对你来说比内存更重要,你可以使用常规(静态大小)数组,而不是 std::vector("enlarge" 它需要时间),一个应付-分配。

我建议您以某种方式判断位数组的近似大小,并使用索引向量的 reserve() 函数。这样你的 vector 就不必重新分配太多(甚至根本不会这样做)。