我无法执行以下操作,编译器在std :: vector中没有匹配的运算符,我认为我不能重载它。那么我的选择是什么,除了仅使用1向量来存储碰撞结果。我试图对缓存非常友好,并且我不希望在设置为true后将相同的bool重置为false,因此或。
void CollisionDetection(const vector<Vector2D>& position1,
const vector<Vector2D>& position2,
dimension dim1, dimension dim2,
vector<bool>& result1, vector<bool>& result2)
{
assert(position1.size()==result1.size());
assert(position2.size()==result2.size());
for(int i=0;i<position1.size();i++)
{
for(int j=0;j<position2.size();j++)
{
result1[i] |= result2[i] |=
rectOverlap(position1[1], position2[i], dim1, dim2);
}
}
}
答案 0 :(得分:3)
std::vector<bool>
是specialization of a std::vector
。这种专业化通过为每个bool
使用1位而不是1个字节来节省空间。
std::vector<bool>::operator[]
返回一个引用包装器(为了允许这种节省空间的优化),这显然没有实现operator|
。
答案 1 :(得分:3)
永远不要使用vector<bool>
。是的,我希望按位运算符在这种类型上失败。