學習了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 ...