C STL 之 string的模擬實現

2021-10-12 10:14:41 字數 2890 閱讀 7821

#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 類的模擬實現 一 建構函式使用初始化列表的優點 建構函式的執行分為兩個階段 初始化階段和計算階段,初始化階段先於計算階段 賦值語句 在使用建構函式給資料成員進行初始化時通常有兩種選擇。一是在建構函式後加上冒號,並用初始化列表的方式對成員進行初始化。二是在建構函式體中用賦值語句完成對成員...