C 模擬實現STL string類

2021-09-30 19:41:05 字數 3587 閱讀 9906

前面部落格 stlstring類相關介面介紹 中對string的介面進行了詳細的介紹和測試,下面我們將對這些介面進行模擬實現,若有疑問可參考前面的部落格。標頭檔案string.h

#pragma once

#include #include #include #include using namespace std;

namespace cxy

iterator end()

public:

//string();//無參建構函式

//string(const char* str);//帶參建構函式

string(const char* str = "");//帶預設引數的建構函式

string(const string& str);//拷貝建構函式

string& operator=(const string& str);//過載賦值運算子

~string();//析構函式

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);

void swap(string& str);

const char* c_str() const;

char& operator(size_t pos);

size_t size();

size_t capacity();

void reserve(size_t n);

void pushback(char ch);

string& operator+=(char ch);

string& operator+=(const char* str);

void insert(size_t pos, char ch);

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

void erase(size_t pos, size_t len);

size_t find(char ch, size_t pos = 0);

size_t find(const char* str, size_t pos = 0);

private:

char* _str;

size_t _size;

size_t _capacity;

static size_t npos;

}; size_t string::npos = -1;

void teststring()

}

成員函式實現檔案 string.cpp

#define _crt_secure_no_warnings

#include "string.h"

using namespace std;

using namespace cxy;

//string::string()

//:_str(new char[1])

////帶參建構函式

//string::string(const char* str)

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

////帶預設引數的建構函式

string::string(const char* str)

string::~string()//析構函式

}void string::swap(string& str)

//拷貝建構函式傳統寫法

//string::string(const string& str)

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

//, _size(str._size)

//, _capacity(str._capacity)

////拷貝建構函式現**法

// copy(s1)

string::string(const string& str)

:_str(nullptr)

, _size(0)

, _capacity(0)

bool string::operator<(const string& s)

bool string::operator==(const string& s)

bool string::operator>(const string& s)

bool string::operator<=(const string& s)

bool string::operator>=(const string& s)

//過載訪問運算子

char& string::operator(size_t pos)

//求字串長度

size_t string::size()

//求字串空間大小

size_t string::capacity()

//為字串預留空間

void string::reserve(size_t newcapacity) }

//在字串後追加乙個字元

void string::pushback(char ch)

//在字串後追加乙個字串

// "hello" "************************xx"

const char* string::c_str() const

//過載運算子+=

string& string::operator+=(char ch)

string& string::operator+=(const char* str)

//在指定位置pos處插入字元ch

void string::insert(size_t pos, char ch)

_str[pos] = ch;

++_size;

}//在指定位置pos處插入字串str

void string::insert(size_t pos, const char* str)

for (size_t i = 0; i < gap; ++i)

_size += gap;

}//在指定位置pos處刪除長度為len的字串

void string::erase(size_t pos, size_t len)

_size -= len;

}//在字串中尋找乙個字元ch,返回該字元的下標

size_t string::find(char ch, size_t pos)

return npos;

}size_t string::find(const char* str, size_t pos)

if (i == len)

return index;

} return npos;

}int main()

STL string容器使用及模擬實現

一.string介紹。string類 string是表示字串的字串類。該類的介面與常規容器的介面基本相同,再新增了一些專門用來操作string的常規操作。string在底層實際是 basic string模板類的別名,typedef basic string string 不能操作多位元組或者變長字...

模擬實現string類 c

include include using namespace std class string string const string m 拷貝建構函式 string 析構函式 string operator string m1 賦值運算子過載 s new char strlen m1.s 1 s...

C 模擬實現日期類

本篇部落格完善了日期類 實現了以下操作 class date 實現 class date 也可以不用給 date const date d year d.year month d.month day d.day 當前日期days天後是什麼日期?date operator int days dayso...