在恒定时间内处理子向量

Dealing with subvectors in costant time

我正在实施一种算法,我需要非常高效。我的算法适用于一组相等且恒定大小的布尔向量,我希望它们在内存中保持连续以避免缓存未命中。因为它用了很多时间,我现在的解决方案是在 运行 算法之前,将集合中的所有向量连接成一个唯一的更大的向量。这应该使所有向量在内存中连续,但给我另一个问题:我无法再访问集合中的单个向量。当然,我可以用

vector<bool>(concatenation.begin()+i, concatenation.end()+i+vector_size)

但这会复制数据,使我原来的 objective 优化性能消失。理想情况下,我希望有一个函数 returns 我是子向量的 const vector<vector_type>&,因为我只需要读取内容而不需要在算法执行期间修改它。

我也愿意接受完全不同的解决方案,但如果可能的话,我想避免使用迭代器。

我还要说布尔向量的大小在编译时是已知的,所以 array 可能会起作用,但我读到不应该使用它们,因为其中的一个是不安全 C 数组的包装器。

I only need to read the content and not modify it during the algorithm execution

首先,您不能像这样使用 vector<bool>,因为它充当位域,所以您不能“提取”它的序列。请改用 vector<char>

也就是说,您可以轻松获得指向数据的指针,例如:

char *array = concatenation.data() + i;
// use it as a normal array, for example: array[0]

I've read that [std::array] shouldn't be used because of they are a wrapper to unsafe C arrays

你认为std::vector是什么?都是数组,一路往下!