C++ String类 实现
来源:互联网 发布:猪八戒软件开发 编辑:程序博客网 时间:2024/06/13 03:47
转的
#pragma once#include <utility>#include <assert.h>#include <string.h>namespace trivial{// A trivial String class that designed for write-on-paper in an interviewclass String{ public: String() : data_(new char[1]) { *data_ = '\0'; } String(const char* str) : data_(new char[strlen(str) + 1]) { strcpy(data_, str); } String(const String& rhs) : data_(new char[rhs.size() + 1]) { strcpy(data_, rhs.c_str()); } /* Implement copy-ctor with delegating constructor in C++11 String(const String& rhs) : String(rhs.data_) { } */ ~String() noexcept { delete[] data_; } /* Traditional: String& operator=(const String& rhs) { String tmp(rhs); swap(tmp); return *this; } */ // In C++11, this is unifying assignment operator String& operator=(String rhs) // yes, pass-by-value { // http://en.wikibooks.org/wiki/More_C++_Idioms/Copy-and-swap swap(rhs); return *this; } // C++11 move-ctor String(String&& rhs) noexcept : data_(rhs.data_) { rhs.data_ = nullptr; } /* Not needed if we have pass-by-value operator=() above, * and it conflits. http://stackoverflow.com/questions/17961719/ String& operator=(String&& rhs) { swap(rhs); return *this; } */ // Accessors size_t size() const { return strlen(data_); } const char* c_str() const { return data_; } void swap(String& rhs) { std::swap(data_, rhs.data_); } private: char* data_;};}namespace trivial2{// string in C++11 with a length memberclass String{ public: String() noexcept : data_(nullptr), len_(0) { } ~String() { delete[] data_; } // only read str when len > 0 String(const char* str, size_t len) : data_(len > 0 ? new char[len+1] : nullptr), len_(len) { if (len_ > 0) { memcpy(data_, str, len_); data_[len_] = '\0'; } else { assert(data_ == nullptr); } } String(const char* str) : String(str, strlen(str)) { } String(const String& rhs) : String(rhs.data_, rhs.len_) { } String(String&& rhs) noexcept : data_(rhs.data_), len_(rhs.len_) { rhs.len_ = 0; rhs.data_ = nullptr; } String& operator=(String rhs) { swap(rhs); return *this; } void swap(String& rhs) noexcept { std::swap(len_, rhs.len_); std::swap(data_, rhs.data_); } // const char* data() const { return c_str(); } const char* c_str() const noexcept { return data_ ? data_ : kEmpty; } size_t size() const noexcept { return len_; } private: char* data_; size_t len_; static const char kEmpty[];};// const char String::kEmpty[] = "";}
0 0
- 【C/C++】String类实现
- [C++]String类的实现
- [C++]String类的实现
- [C++]String类的实现
- C++String类的实现
- 【c++】string类的实现
- C++string类的实现
- C++:模拟实现string类
- C++string类的实现
- C++String类的实现
- 模拟实现string类(c++)
- C++string类的实现
- 【C++】模拟实现String类
- C/C++string类的实现
- 【学习笔记】【C++】自己实现string类
- c语言string类函数实现汇总
- 【C++】实现STL模板类string
- C++string类的一个实现
- 利用C++模板,代替虚函数实现类的静态多态性及动态继承
- html button样式变圆角
- 使用Chrome来调试你的Android App
- Hadoop学习第四天之hadoop命令操作(下)
- IPhone 日历提醒
- C++ String类 实现
- android 实时渲染模糊
- Oracle OCP笔记(15)模式对象(表,约束,索引等)
- 关于推荐系统中的特征工程
- 自动检测可用串口实现串口通讯程序(可实现串口热插拔检测)
- 检测步数和运动状态
- [Publish AAR To Maven] 注册 Maven 仓库 sonatype.org 账户
- 如何批量分割PDF文档资料
- const关键字