C++ 共时子向量的处理

C++ 共时子向量的处理,c++,arrays,caching,vector,C++,Arrays,Caching,Vector,我正在实现一个算法,我需要非常高效。我的算法处理一组大小相同的布尔向量,我希望它们在内存中保持连续,以避免缓存未命中。由于它使用了很多时间,我目前的解决方案是在运行算法之前,将集合中的所有向量连接成一个唯一的更大的向量。这将使所有向量在内存中连续,但给我另一个问题:我无法再访问集合中的单个向量。当然,我可以用 vector<bool>(concatenation.begin()+i, concatenation.end()+i+vector_size) vector(concate

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

vector<bool>(concatenation.begin()+i, concatenation.end()+i+vector_size)
vector(concatenation.begin()+i,concatenation.end()+i+向量大小)
但这会复制数据,使我优化性能的原始目标消失。理想情况下,我希望有一个函数返回子向量的
常量向量&
,因为我只需要读取内容,而不需要在算法执行期间修改它

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

我还要说bools向量的大小在编译时是已知的,所以也许
数组
可以工作,但我已经读到它们不应该被使用,因为它们是不安全的C数组的包装器

我只需要阅读内容,而不需要在算法执行期间修改它

首先,你不能像这样使用向量,因为它作为一个位域,所以你不能“提取”它的序列。改用
矢量

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

char *array = concatenation.data() + i;
// use it as a normal array, for example: array[0]
我读到不应该使用[std::array],因为它们是不安全的C数组的包装

你认为
std::vector
是什么?全是阵列,一路向下

我只需要阅读内容,而不需要在算法执行期间修改它

首先,你不能像这样使用向量,因为它作为一个位域,所以你不能“提取”它的序列。改用
矢量

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

char *array = concatenation.data() + i;
// use it as a normal array, for example: array[0]
我读到不应该使用[std::array],因为它们是不安全的C数组的包装

你认为
std::vector
是什么?全是阵列,一路向下

FWIW,一个
向量
将其“元素”打包在一起,并表现为一个位集。这种位操作将带来运行时成本。如果您可以腾出空间,那么最好使用其他不压缩信息的工具。另外,
std::array
是一种方法,前提是您知道编译时的大小。它也不像vector那样打包。FWIW,一个
向量
将它的“元素”打包在一起,并表现为一个位集。这种位操作将带来运行时成本。如果您可以腾出空间,那么最好使用其他不压缩信息的工具。另外,
std::array
是一种方法,前提是您知道编译时的大小。它也不像vector那样打包。