C++ 如何使用boost::dynamic_位集为类重载()运算符
我创建了一个类,它模拟位集中的二维数据集。以下是我迄今为止创造的:C++ 如何使用boost::dynamic_位集为类重载()运算符,c++,boost,byte,bit,bitset,C++,Boost,Byte,Bit,Bitset,我创建了一个类,它模拟位集中的二维数据集。以下是我迄今为止创造的: class Data { private: int width_; int height_; boost::dynamic_bitset<> * bitset_; dynamicznie public: Data() : width_(0), height_(0) {} Data(int width, int
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];
}
};
显然,dynamic_位集本身提供了一个运算符[]。您已将其声明为指针,因此方括号被视为该指针的索引访问;它将指针视为指向数组的指针,并返回该数组的(不存在且未分配)元素,该元素是对动态位集的(悬空)引用,而不是对单个位的引用 是否有任何真正的理由让该成员作为指针?你甚至不在复制/分配/销毁中处理它,因此违反了五条规则。只需将其设置为对象成员,而不是指向堆上分配的对象的指针:
boost::dynamic_bitset<> bitset;
public:
Data(int w, int h): width_(w), height_(h), bitset(w * h) {}
boost::动态位集位集;
公众:
数据(intw,inth):宽度(w),高度(h),位集(w*h){
另一方面,如果您不使用负尺寸,则std::size\U t作为尺寸标注更有意义。
位集是一个指针,您应该在使用前取消对其的引用
(*bitset_)[x * height_ + y];
请记住运算符[]
对于动态位集
返回临时对象
参考运算符[](尺寸类型pos)
布尔运算符[](大小\类型位置)常数
不能将其分配给L值引用-动态\u位集::引用&
。因此,您应该如下定义运算符()
boost::dynamic_bitset<>::reference operator()(const int x, const int y)
{
return (*bitset_)[x * height_ + y];
}
boost::dynamic_bitset::reference operator()(常量int x,常量int y)
{
返回(*位集)[x*高度+y];
}
我无法发布其他问题,因此我将在此处发布。我想了解从IFS函数生成分形的算法。此算法代码如下所示:
但是我不明白minX,minY,maxX,maxY,ratioX,ratioY变量的用途是什么。我就是不能。我想了很多,想不出来
有趣的是,这些值必须设置为特定值。否则算法就不能正常工作(我已经测试过了)。它指出的错误是什么?
(*bitset_)[x * height_ + y];
boost::dynamic_bitset<>::reference operator()(const int x, const int y)
{
return (*bitset_)[x * height_ + y];
}