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>専門ですstd::vectorboolこの特殊化により、1バイトではなく、各に1ビットを使用することでスペースを節約できます。

std::vector<bool>::operator[](このスペース節約の最適化を可能にするために)参照ラッパーを返しますが、これは明らかに実装されていませんoperator|

于 2012-06-05T20:55:38.847 に答える
3

絶対に使用しないでくださいvector<bool>。はい、この型ではビット単位の演算子が惨めに失敗すると思います。

たとえば、vector<bool> の代替を参照してください。

于 2012-06-05T20:56:51.717 に答える