#include
#include
using
namespace std;
//stl裡string的模擬實現
namespace my_string
else
}string
(const string& s)
:_str
(nullptr),
_capacity(0
),_size(0
) string&
operator
=(string s)
//不用引用傳遞,否則會變成交換兩個物件
~string()
}public
: iterator begin()
const
iterator end()
const
public
:void
push_back
(char ch)
string&
operator+=
(char ch)
string&
operator+=
(const
char
* str)
strcat_s
(_str,
(_size + len)*2
, str)
; _size +
= len;
return
*this;}
void
(const
char
* str)
char
&operator
(size_t pos)
bool
operator
<
(const string& s)
bool
operator
>=
(const string& s)
bool
operator
>
(const string& s)
bool
operator
<=
(const string& s)
bool
operator==(
const string& s)
bool
operator!=(
const string& s)
public
: size_t lenght()
const
size_t size()
const
size_t capacity()
const
bool
empty()
const
void
clear()
const
char
*c_str()
const
public
:void
swap
(string &s)
public
://預留空間 針對capacity
void
reserve
(size_t n =0)
}//調整元素的個數 針對size
void
resize
(size_t n,
char c =
'\0'
)//預設用'\0'填充
memset
(_str + _size, c, n - _size);}
_size = n;
_str[n]
='\0';}
//查詢返回字元在string中第一次出現的位置
size_t find
(char c, size_t pos =0)
const
return-1
;}//查詢返回子串s在string中第一次出現的位置
size_t find
(const
char
* s, size_t pos =0)
const
//模式匹配 這裡用了bf演算法if(
*sub ==
'\0'
)else
str++;}
return npos;
}//在pos位置插入字元c
string&
insert
(size_t pos,
char c)
_str[pos]
= c;
_size++
;return
*this;}
//在pos位置插入字串str, 並返回字串第乙個字元的位置
string&
insert
(size_t pos,
const
char
* str)
;//刪除pos位置上的元素,並返回該元素的下乙個位置
string&
erase
(size_t pos, size_t len)
else
return
*this;}
private
:char
* _str;
//字串空間
size_t _capacity;
//容量
size_t _size;
//字串的有效長度};
ostream&
operator
<<
(ostream& out,
const string& s)
size_t string::npos =
(size_t)-1
;//靜態變數類外定義
}
string的模擬實現 String
三 運算子過載 四 迭代器 五 其他操作 在實現string類之前,我們需要知道string是表示字串的字串類 string類的成員變數如下 庫中存在string類,所以命名為string會造成衝突,所以我們定義乙個string類去實現string類的各種功能 class string string...
string的模擬實現
pragma once include include using namespace std include 不用用free釋放一段堆空間兩次。因為可能釋放完第一次後,作業系統把這塊記憶體分配出去了,立即有釋放會導致問題 建立乙個類,編譯器會預設生成六個函式 對空指標的解引用會照成異常。names...
String 類的模擬實現
string 類的模擬實現 一 建構函式使用初始化列表的優點 建構函式的執行分為兩個階段 初始化階段和計算階段,初始化階段先於計算階段 賦值語句 在使用建構函式給資料成員進行初始化時通常有兩種選擇。一是在建構函式後加上冒號,並用初始化列表的方式對成員進行初始化。二是在建構函式體中用賦值語句完成對成員...