处理并行时间中的子向量
Dealing with subvectors in costant time
我正在实现一个算法,我需要非常高效。我的算法处理一组大小相等且不变的布尔向量,我希望在内存中保持它们的连续性,以避免缓存未命中。由于它花费了很多时间,我目前的解决方案是在运行算法之前,将集合中的所有向量连接到一个唯一的更大的向量中。这应该会使所有向量在内存中连续,但给了我另一个问题:我不能再访问集合中的单个向量了。当然,我可以使用
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
是什么?都是数组,一直往下!
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 使用并行参数向量调用元素向量的成员函数
- 检查两个向量是否并行的最有效方法
- 使用异步/期货并行和并发计算向量的范数
- 并行算法将向量的元素分配到另一个元素的元素
- C++:快速/并行计算两个"std::vector<double>"向量之间的L1距离
- OpenMP 与向量的向量并行
- 使用多个线程的并行向量乘法比顺序乘法需要更长的时间
- 并行程序中的多图或排序向量
- 使用异步C++进行向量的并行乘法
- 在OpenMP并行区域中使用向量push_back是否安全
- 在并行追加时,使用向量列表和向量的向量对性能的影响
- 并行乘法向量矩阵
- 在OPENMP中并行化矩阵向量的加法
- 多个排序向量与固定线程数的并行交集