[230521] C++ STL string 类的简单实现

[230521] C++ STL: string 类的简单实现

想起来腾讯一面,面试官上来先让我手撕 string 类,没绷住,当时也没及时补,现在补补。

class string 
{
private:
	char *_str;
    size_t _size;
    size_t _capacity;
public:
    //有参构造函数
    string(const char *str = "") 
    	: _size(strlen(str)), _capacity(_size) 
    {
        _str = new char[_capacity + 1];
        strcpy(_str, str);
    }
    //拷贝构造函数
    string(const string &str)
        : _size(str._size), _capacity(str._capacity)
    {
		_str = new char[_capacity + 1];
        strcpy(_str, str);
    }
    //析构函数
    ~string()
    {
        if(_str != nullptr)
        {
			delete[] _str;
            _str = nullptr;
            _size = _capacity = 0;
        }
    }
}

知识补充

  1. sizeof/strlen/size
函数性质描述
sizeof运算符,返回类型为 size_t,使用方法为 sizeof(expression)可以应用于任何数据类型,包括基本数据类型,如整数和浮点类型、指针类型,或复合数据类型,如 struct、union 等。
==返回已分配的实际大小。==如果将相同的值作为输入传递给 sizeof()、strlen() 和 size(),那么 sizeof() 将给出一个比字符串长度高的值。
strlen库函数,原型为 int strlen(const char *str)接收一个指针为参数,在运行时遍历内存直至遍历到 NULL;应用于char类型的数组
size成员函数,str.size()string类的成员函数
  • sizeof 的使用
//sizeof是一个编译时运算符,在编译时源代码会转换为二进制代码
//故==运行时并不会执行expression==
int main(void)
{
    int y;
    int x = 11;
    y = sizeof(x++);		// value of x doesn't change
    printf("%i %i", y, x);	// prints 4 and 11
    return (0);
}

//输出为:4 11
  • strlen 的使用
char ch[] = {'g', 'e', 'e', 'k', 's', '\0'};
char str[] = "geeks";
char *str = "geeks";
  1. new 和 delete 一个数组的方式
char *arr = new char[size];
delete[] arr;
  1. **在类定义中,可以访问本类一个对象的私有成员吗?**嗯,可以的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值