处理并行时间中的子向量

Dealing with subvectors in costant time

本文关键字:向量 并行 时间 处理      更新时间:2024-05-10

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

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

但这会复制数据,使我优化性能的原始目标消失。理想情况下,我希望有一个函数可以返回子向量的const vector<vector_type>&,因为我只需要读取内容,而不需要在算法执行期间对其进行修改。

我也对完全不同的解决方案持开放态度,但如果可能的话,我希望避免使用迭代器。

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

我只需要读取内容,而不需要在算法执行期间对其进行修改

首先,你不能像这样使用vector<bool>,因为它充当了一个位字段,所以你不能"提取物";请使用vector<char>

也就是说,你可以很容易地获得一个指向你的数据的指针,比如:

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

我读到不应该使用[std::array],因为它们是不安全的C数组的包装器

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