c 簡單實現 string

2021-10-02 01:52:13 字數 3627 閱讀 5878

學習了c++, 其中stl是當之無愧的佼佼者。簡單實現一些stl容器-string,只寫了部分功能。

/*

模擬實現乙個簡單的stirng容器

*/#pragma once

#define _crt_secure_no_warnings 1

#include

#include

#include

using

namespace std;

class

string

//拷貝建構函式

string

(const string& s)

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

//string(const string& s)

// :_str(nullptr)

// , _size(0)

// , _capacity(0)

////類與類成員交換函式 - 淺拷貝。

void

swap

(string& str)

//賦值運算子過載

string&

operator=(

const string& s)

return

*this;}

//賦值運算子過載 - 現**法

//string& operator=(string str)

//析構函式

~string()

}//訪問

char

&operator

(size_t pos)

//與上面operator函式構成過載,上面可讀可寫, 這個唯讀不能寫。

//主要是搭配const string型的物件。

const

char

&operator

(size_t pos)

const

iterator begin()

iterator end()

const_iterator begin()

const

const_iterator end()

const

const iterator cbegin()

const iterator cend()

//修改

void

push_back

(char c)

_str[_size]

= c;

++_size;

_str[_size]

='\0';}

void

(const

char

* str)

strcpy

(_str + _size, str)

; _size +

= len;

_str[_size]=0

;}string&

operator+=

(char c)

string&

operator+=

(const

char

* str)

string&

operator+=

(const string& str)

//insert插入乙個字元

void

insert

(size_t pos,

char c)

//先後移再插入 - 建議畫圖理解!

size_t end = _size +1;

for(end; end > pos;

--end)

_str[pos]

= c;

_size++;}

//insert插入乙個字串

void

insert

(size_t pos,

const

char

* str)

size_t end = _size + len;

size_t end1 = _size;

for(end; end > pos;

--end)

int i =0;

while

(str[i]

!='\0')

_size +

= len;

}//earse刪除函式

void

erase

(size_t pos,

int len)

--_size;

}//刪除迭代器對應的值

void

erase

(iterator it)

--_size;

}//查詢乙個字串, 找到後返回下標。 沒有返回npos

size_t find

(const

char

* str, size_t pos =0)

//查詢乙個字元, 找到後返回下標。 沒有返回npos

size_t find

(char ch, size_t pos =0)

return npos;

}//容量

//reserve介面, 只增不減!

void

reserve

(size_t n)

}//resize重新設定

void

resize

(size_t n,

char c =

'\0')if

(n > _size)

//最後修改_size

_size = n;

_str[_size]

='\0';}

//字串的大小

size_t size()

const

//當前動態開闢的容量大小

size_t capacity()

const

//提供乙個char*的指標。 唯讀不寫

const

char

*c_str()

const

private

:static

const size_t npos;

char

* _str;

int _size;

int _capacity;};

//對靜態成員賦值。

const size_t string::npos =-1

;//友元函式實現

ostream&

operator

<<

(ostream& _cout,

const string& str)

return _cout;

}

**中我盡可能多地表達每段函式的資訊。 一些簡單的我就不做詳細的解讀。

在寫原始碼時, 需要掌握幾點:

1、熟悉並知道容器中每個介面的功能

2、知道每個容器的優缺點

分析:

1、我們可以看出string容器是線性儲存的, 因此這種容器就像線性表一樣會有乙個缺點–不易於任意位置插入刪除(效率不高),更偏向於遍歷。

2、當然也有優點: 那就是對記憶體使用率是比較好的。遍歷效率高!

3、還有一點增容這塊代價還是很大的!

string類的簡單實現

include class string string string const char ch else string string const string str string string string string operator const string str string stri...

string類的簡單實現

string類是stl裡面個乙個基礎類,同時也是乙個容器。stl在string類裡面塞了很多東西,大概有106個成員函式,以及大量的typedef 巨集,晦澀難懂。本文只是簡單通過物件導向的方法簡單實現了乙個string,以後會在此基礎進行擴充和改進。ifndef mystring h define...

C 仿string實現的String方法

c 仿string實現的string方法 string.h include using namespace std class string 拷貝構造 string const string string string 過載等號運算子,接收的是c語言字串 string operator const ...