当得此景。
string
简介:用于处理字符串,提供了一个可变长度的字符数组。
string类框架
class string
{
char* _str;
size_t _size;
size_t _capacity;
public:
typedef char* iterator;
friend ostream& operator<<(ostream& _cout, const L::string& tmp);
friend istream& operator>>(istream& _cin, L::string& tmp);string(const char* arr = "")
{
char* tmp = new char[strlen(arr)+1];
assert(tmp);
strcpy(tmp, arr);
_str = tmp;
_size = strlen(arr);
_capacity = _size;
}
string(size_t n, char c='\0')
{
char* tmp = new char[n + 1];
assert(tmp);
memset(tmp, c, n); tmp[n] = '\0';
_str = tmp;
_size = n;
_capacity = n;
}
string(const string& s)
:_str(nullptr)
,_size(0)
,_capacity(0)
{
string tmp(s);
swap(tmp);
}
~string()
{
if (_str)
{
delete[]_str;
_str = nullptr;
}
}。。。。。。下边的函数实现
}
iterator(迭代器)
用来遍历字符串(用指针模拟,实际底层非指针,只是使用起来像指针)
就是这么简洁。
modify(修改操作)
push_back() operator+=() append() clear() swap() c_str()
capacity(容量操作)
size() capacity() empty() resize() reserve()
access(访问操作)
operator[]
relational operators(关系操作)
operator< > <= >= == !=
find(寻找)
find()
insert(插入)
insert()
erase(删除)
erase()
operator << >>
记得加友元
小知识
1.静态变量只在当前文件可用 ,如果头文件展开在多个源文件中,全局和静态变量都不可以定义在头文件中,否则展开时会有多份,编译时会有冲突。
2.在头文件展开时函数定义不可以有两份,声明可以。
3.有符号数和无符号数比较时,会将有符号转化为无符号比较。