1 Star 0 Fork 0

游鱼就会败北/C++11新特性

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
mystring.h 2.36 KB
一键复制 编辑 原始数据 按行查看 历史
游鱼就会败北 提交于 2022-07-04 16:06 +08:00 . 移动语义版的string
namespace mystring{
class string{
public:
typedef char* iterator;
iterator begin(){
return _str;
}
iterator end(){
return _str + _size;
}
string(const char* str = "")
:_size(strlen(str))
, _capacity(_size)
{
std::cout << "string(const char* str = \"\") -- 构造" << std::endl;
_str = new char[_capacity + 1];//重新开辟空间
strcpy(_str, str);
}
void swap(string& s){
std::swap(_str, s._str);
std::swap(_size, s._size);
std::swap(_capacity, s._capacity);
}
// 拷贝构造
string(const string& s)
:_str(nullptr)
{
std::cout << "string(const string& s) -- 深拷贝" << std::endl;
string tmp(s._str);
swap(tmp);
}
// 移动构造
string(string&& s)
:_str(nullptr)
, _size(0)
, _capacity(0)
{
std::cout << "string(string&& s) -- 移动构造" << std::endl;
this->swap(s);
}
// 移动赋值
string& operator=(string&& s){
std::cout << "string& operator=(string&& s) -- 移动赋值" << std::endl;
this->swap(s);
return *this;
}
// 赋值重载
string& operator=(const string& s){
string tmp(s);
swap(tmp);
return *this;
}
~string()
{
delete[] _str;
_str = nullptr;
}
char& operator[](size_t pos){
assert(pos < _size);
return _str[pos];
}
void reserve(size_t n){
if (n > _capacity)
{
char* tmp = new char[n + 1];
strcpy(tmp, _str);
delete[] _str;
_str = tmp;
_capacity = n;
}
}
void push_back(char ch){
if (_size >= _capacity)
{
size_t newcapacity = _capacity == 0 ? 4 : _capacity * 2;
reserve(newcapacity);
}
_str[_size] = ch;
++_size;
_str[_size] = '\0';
}
//string operator+=(char ch)
string& operator+=(char ch){
push_back(ch);
return *this;
}
const char* c_str() const{
return _str;
}
private:
char* _str;
size_t _size;
size_t _capacity; // 不包含最后做标识的\0
};
string to_string(int value){
bool flag = true;
if (value < 0){
flag = false;
value = 0 - value;
}
mystring::string str;//创建局部临时对象
while (value > 0){
int x = value % 10;
value /= 10;
str += ('0' + x);
}
if (flag == false){
str += '-';
}
std::reverse(str.begin(), str.end());
return str;
}
};
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/ma-yong12138/c-11-new-features.git
git@gitee.com:ma-yong12138/c-11-new-features.git
ma-yong12138
c-11-new-features
C++11新特性
master

搜索帮助