根据某些函数,有效地(按时间)将 double 数组转换为 bitset
Efficiently (time-wise) conversion of an array of double to a bitset, according to some function
我需要在两段代码之间建立接口:一段代码输出一个“数组”(我可以接受输出为“标准”C++
数组(双精度类型),或者 std::vector<double>
),还有一个接受 std::bitset
.
撇开两端发生的事情...
根据某些函数将输出数组转换为 std::bitset
的最有效(时间)方式是什么?
我的意思是,对于输出位集中的每个元素,我想根据某个函数(例如,大于 [=17 的元素)分配一个值(0
或 1
) =] 被赋值 1
,小于 N
的元素被赋值 0
... 或者所有偶数元素被赋值 1
,等等).
显而易见的(也许也是最简单的)方法当然是使用循环。例如,类似(在值比较的情况下):
L = outputVector.size();
std::bitset<L> inputBitset;
for(int i = 0; i < L; ++i){
if(outputVector[i] > N){
inputBitset[i] == 1;
}
}
我也考虑过用 std::replace_if()
做一些事情(例如,用 1
替换所有大于 N
的值,然后迭代“数组”并设置位相应地),这可能会提高速度(尽管看起来 令人难以置信 笨重)。
我唯一关心的是速度,有没有更好的方法?
您的编译器能够向量化的最有可能的模式是直接将结果设置为比较结果
for (int i = 0; i < L; ++i)
inputBitset[i] = outputVector[i] > N;
如果您的处理器支持,此类循环通常会被矢量化。更复杂的循环也可能被向量化,因此最终会得到相同的结果,但没有理由让代码比它需要的更复杂。
我需要在两段代码之间建立接口:一段代码输出一个“数组”(我可以接受输出为“标准”C++
数组(双精度类型),或者 std::vector<double>
),还有一个接受 std::bitset
.
撇开两端发生的事情...
根据某些函数将输出数组转换为 std::bitset
的最有效(时间)方式是什么?
我的意思是,对于输出位集中的每个元素,我想根据某个函数(例如,大于 [=17 的元素)分配一个值(0
或 1
) =] 被赋值 1
,小于 N
的元素被赋值 0
... 或者所有偶数元素被赋值 1
,等等).
显而易见的(也许也是最简单的)方法当然是使用循环。例如,类似(在值比较的情况下):
L = outputVector.size();
std::bitset<L> inputBitset;
for(int i = 0; i < L; ++i){
if(outputVector[i] > N){
inputBitset[i] == 1;
}
}
我也考虑过用 std::replace_if()
做一些事情(例如,用 1
替换所有大于 N
的值,然后迭代“数组”并设置位相应地),这可能会提高速度(尽管看起来 令人难以置信 笨重)。
我唯一关心的是速度,有没有更好的方法?
您的编译器能够向量化的最有可能的模式是直接将结果设置为比较结果
for (int i = 0; i < L; ++i)
inputBitset[i] = outputVector[i] > N;
如果您的处理器支持,此类循环通常会被矢量化。更复杂的循环也可能被向量化,因此最终会得到相同的结果,但没有理由让代码比它需要的更复杂。