13.44:编写标准库string类的简化版本,命名为String。你的类应该至少有一个默认构造函数和一个接受C
风格字符串指针参数的构造函数。使用allocator为你的String类分配所需内存
String.h头文件
#pragma once #include<memory> #include<iostream> using namespace std; class String { friend ostream& operator<<(ostream& os, String &str)//运算符重载,实现输出 { auto beg = str.elements; for (;beg != str.first_free;) os << *(beg++); return os; } public: String() :elements(nullptr), first_free(nullptr), cap(nullptr) {} // 默认构造函数,得到一个空字符串 String(char* chptr); //C风格字符串指针参数的构造函数 void free(); //析构函数的辅助函数 ~String(); //析构函数,因为用了allocator,必须要定义析构函数 private: allocator<char> alloc; char* elements; //指向字符串首元素的指针 char* first_free; //指向字符串尾元素之后的指针 char* cap; //指向尾后位置的指针 }; String::String(char *chptr) { size_t len = 0; for (char *ch = chptr;'