大数结构是一种常见的数据结构,在C++当中,我们常用vector来动态实现。除此之外,我们也可以仿照vector的思路,自己实现内存的动态分配,当内存容量达到上限时,用C-api realloc进行内存的重新分配。
#define REQUIRE2(p, q) assert((p) || (q))
#define REQUIRE1(p) assert(p)
#define INITSIZE 24
先定义了几个宏,前两个是对表达式的判断,INITSIZE是动态大数结构的初始阈值,当超过了这个阈值之后,便发生扩容。
public:
BigNum(const BigNum& other) : sign(other.sign), p(other.p) {}
BigNum() {
p = static_cast(malloc(INITSIZE));
REQUIRE1(p);
}
BigNum(BigNum&& other) : sign(other.sign), p(other.p) {}
~BigNum() {
free(p);
}
BigNum& operator=(const BigNum& other) = default;
bool operator==(const BigNum& other) const = default;
构造析构……注意析构要释放内存,防止发生内存泄漏。
void init() {
sign = getchar();
REQUIRE2(sign == '+', sign == '-');
char c;
char *start = p;
while ((c = getchar()) != ' ' && c != 'n' && c != 't' && c != 'r') {
REQU服务器托管网IRE1(isdigit(c));
if (start - p >= threshold - 1) {
void *mem = realloc(p, threshold (mem);
start = p + threshold - 1;
threshold
这是关键的一部分,通过getchar函数,使得从键盘上动态读取字符,并且维护一个指针start,这样就可以实时统计大数结构当中的容量。在这里,前面定义的宏就派上用场了,需要严格检查读入的字符是否为数字(第一个读入的字符必须是+或者-符号)。
friend std::ostream& operator
重载输出函数。
private:
char sign;
char *p;
std::size_t threshold = INITSIZE;
在内部,维护了三个成员,分别是数的符号,指向初始内存位置的指针与阈值(阈值每次发生扩容时会乘2)。
完整代码如下
#define REQUIRE2(p, q) assert((p) || (q))
#define REQUIRE1(p) assert(p)
#define INITSIZE 24
class BigNum {
public:
Bi服务器托管网gNum(const BigNum& other) : sign(other.sign), p(other.p) {}
BigNum() {
p = static_cast(malloc(INITSIZE));
REQUIRE1(p);
}
BigNum(BigNum&& other) : sign(other.sign), p(other.p) {}
~BigNum() {
free(p);
}
BigNum& operator=(const BigNum& other) = default;
bool operator==(const BigNum& other) const = default;
void init() {
sign = getchar();
REQUIRE2(sign == '+', sign == '-');
char c;
char *start = p;
while ((c = getchar()) != ' ' && c != 'n' && c != 't' && c != 'r') {
REQUIRE1(isdigit(c));
if (start - p >= threshold - 1) {
void *mem = realloc(p, threshold (mem);
start = p + threshold - 1;
threshold
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: NLP与GPT联合碰撞:大模型与小模型联合发力
NLP是什么东西?
Al大小模型联合发力目录标题 NLP是什么东西? Al大小模型联合发力 NLP是自然语言处理,而GPT是自然语言生成模型。 它们的联合碰撞结果是大模型与小模型联合发力,是因为大模型可以提供更好的语言理解和生成能力,而小模型则可以更快地进行推理和预测。 因此,将它们结合起来,可以充…