0

我不能执行以下操作,编译器说 std::vector 中没有匹配的运算符,我认为我不能重载它。那么我有什么选择,除了只使用 1 向量来存储碰撞结果。我正在尝试对缓存非常友好,并且我不希望在将其设置为 true 后将相同的 bool 重置为 false,因此使用 or。

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);
        }
    }
}
4

2 回答 2

3

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

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

于 2012-06-05T20:55:38.847 回答
3

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

参见例如替代向量<bool>

于 2012-06-05T20:56:51.717 回答