string類模擬實現

2021-10-06 21:35:30 字數 2996 閱讀 9979

#define _crt_secure_no_warnings

#include #include using namespace std;

class string

iterator end()

const_iterator begin()const

const_iterator end()const

//無參建構函式

string()

:_str(new char[16])

, _size(0)

, _capacity(0)

//建構函式

string(const char* str)

拷貝建構函式

//string(const string& str)

// :_str(new char[str._capacity+1])

// ,_size(str._size)

// ,_capacity(str._capacity)

// //拷貝建構函式的現**法:建議這樣寫

string(const string& str)

:_str(nullptr)

, _size(0)

, _capacity(0)

void swap(string& str)

//深拷貝交換:效率低

/*void swap(string& str) */

//賦值運算子

//string& operator=(const string& str)

// return *this;

//}//賦值運算子現**法

//**復用:拷貝構造 (傳值時進行拷貝構造)

string& operator=(string str)

const char* c_str()const

//析構函式

~string()

} char& operator(size_t pos)

const char& operator(size_t pos)const

size_t size() const

void pushback(const char& ch)

//尾插入字元

_str[_size] = ch;

//更新_size

++_size;

//不要忘記更新'\0'

_str[_size] = '\0';

//insert(_size,ch);

} void reverse(size_t n)

} //檢查容量

int len = strlen(str);

if (_size + len > _capacity)

//拷貝內容

strcpy(_str + _size, str);

//更新_size

_size += len;

//insert(_size,str)

} string& operator+=(const char& ch)

string& operator+=(const char* str)

void insert(size_t pos, const char& ch)

size_t end = _size + 1;

//元素向後移動

while (end > pos)

//插入元素

_str[pos] = ch;

//更新

++_size;

} void insert(size_t pos, const char* str)

size_t end = _size + len;

while (end > pos + len - 1)

//插入字串

for (int i = 0; i < len; ++i)

//更新_size

_size += len;

} //調整_size

void resize(size_t n,const char ch = '\0')

if (n > _size)

_size = n;

_str[_size] = '\0';

} void popback()

void earse(size_t pos, size_t len)

else

_size -= len;

}} }

//字串查詢,返回索引

size_t find(const char* str)

else

return npos;

}private:

char* _str;

size_t _size;

size_t _capacity;

public:

static const size_t npos;

};//靜態成員變數類外初始化

const size_t string::npos = -1;

//加法運算子過載:不改變加數

string operator+(const string& s, const string& str)

string operator+(const string& s, const char* str)

string operator+(const string& s, const char& ch)

ostream& operator<<(ostream& cout, const string& str)

void test()

cout << endl;

//範圍for :底層利用迭代器實現

for (const char& ch : str)

cout << endl;

//遍歷

for (int i = 0; i < str.size(); ++i)

cout << endl;

}

模擬實現string類

include using namespace std include class string string string a 2 為什麼要用 優點在哪 string void print string operator const string a string operator const s...

模擬實現string類

在c 中,string其實就是將字串封裝起來的類,呼叫類中的成員函式可以完成對類內的字串進行增刪查改,並且將操作符過載,可以更直觀的操作字串,省去了c語言中很多麻煩的操作,有現成的成員函式供我們使用。舉乙個簡單的例子 在c語言中要在一串字串的尾部拼接另乙個字串,我們需要做的事情就是定義兩個字串,要使...

String 類的模擬實現

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