使用按位或等号(| =使用向量

时间:2012-06-05 20:46:08

标签: c++ bit-manipulation

我无法执行以下操作,编译器在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);
        }
    }
}

2 个答案:

答案 0 :(得分:3)

std::vector<bool>specialization of a std::vector。这种专业化通过为每个bool使用1位而不是1个字节来节省空间。

std::vector<bool>::operator[]返回一个引用包装器(为了允许这种节省空间的优化),这显然没有实现operator|

答案 1 :(得分:3)

永远不要使用vector<bool>。是的,我希望按位运算符在这种类型上失败。

参见例如Alternative to vector<bool>