【问题标题】:Using bitwise or equals (|= with a vector使用按位或等于 (|= 与向量
【发布时间】:2012-06-06 09:01:55
【问题描述】:

我不能执行以下操作,编译器说 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);
        }
    }
}

【问题讨论】:

  • rectOverlap()的返回类型是什么?
  • 你能发布rectOverlap()的定义吗?还有Vector2Ddimension的定义?我看不到代码的发布部分有任何问题
  • 想象一下它的 result1[i] |= result2[i] |= true;同样的错误。

标签: c++ bit-manipulation


【解决方案1】:

std::vector&lt;bool&gt; 是一个specialization of a std::vector。这种特殊化通过为每个 bool 使用 1 位而不是 1 字节来节省空间。

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

【讨论】:

    【解决方案2】:

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

    参见例如Alternative to vector<bool>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 2017-06-16
      • 2018-02-17
      • 2022-09-24
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多