我创建了一个模拟来自bitset的2d数据集的类。这是我到目前为止所创造的内容:
class Data
{
private:
int width_;
int height_;
boost::dynamic_bitset<> * bitset_; dynamicznie
public:
Data() : width_(0), height_(0) {}
Data(int width, int height) : width_(width), height_(height)
{
bitset_ = new boost::dynamic_bitset<>(width * height);
}
boost::dynamic_bitset<>::reference & operator()(const int x, const int y)
{
return bitset_[x * height_ + y];
}
};
不幸的是,这不起作用,它表示错误:
boost::dynamic_bitset<>::reference & operator()(const int x, const int y)
{
return bitset_[x * height_ + y];
}
我希望能够像这样在这个类的实例中操作bitset:
Data data = new Data(10, 10);
bool i = 1
data(0, 1) = i;
答案 0 :(得分:1)
显然,dynamic_bitset自己提供了一个operator []。您已将其声明为指针,因此方括号被视为该指针的索引访问;它将您的指针视为指向数组的指针,并返回该数组的(未存在和未分配)元素,该元素是对dynamic_bitset的(悬空)引用,而不是对单个位的引用。
是否有任何真正的理由让该成员成为指针?您甚至不会在复制/分配/销毁中处理它,因此违反了规则五。只需使它成为一个对象成员,而不是指向堆上分配的东西的指针:
boost::dynamic_bitset<> bitset;
public:
Data(int w, int h): width_(w), height_(h), bitset(w * h) {}
P.S。如果你没有真正使用负尺寸,std::size_t
作为尺寸大小更有意义。
答案 1 :(得分:1)
bitset_
是一个指针,您应该在使用
(*bitset_)[x * height_ + y];
并记住operator[]
dynamic_bitset
返回临时对象
引用运算符[](size_type pos);
bool operator [](size_type pos)const;
您无法将其分配给L值参考 - dynamic_bitset<>::reference&
。因此,您应该按如下方式定义operator()
boost::dynamic_bitset<>::reference operator()(const int x, const int y)
{
return (*bitset_)[x * height_ + y];
}
答案 2 :(得分:0)
我无法发布其他问题,所以我会在此发布。我想了解从IFS函数生成分形的算法。此算法代码在此处: http://www.algorytm.org/fraktale/system-funkcji-iterowanych-ifs/ifs-c.html 但我无法理解minX,minY,maxX,maxY,ratioX,ratioY变量的目的是什么。我不能。我一直在思考,并且无法弄清楚。
有趣的是,这些valubes必须设置为特定值。否则算法无法正常工作(我已经测试过了)。