所在的位置: c++ >> 培训学校 >> string类科普中国

string类科普中国

C++、java、VB等编程语言中的名词。在java、C#中,String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。

string是C++标准程序库中的一个头文件,定义了C++标准中的字符串的基本模板类std::basic_string及相关的模板类实例

介绍

模板类实例std::basic_string的模板实参stringcharwstringwchar_tu16stringchar16_t(C++11新增)u32stringchar32_t(C++11新增)

其中的string是以char作为模板参数的模板类实例,把字符串的内存管理责任由string负责而不是由编程者负责,大大减轻了C语言风格的字符串的麻烦。

std::basic_string提供了大量的字符串操作函数,如比较、连接、搜索、替换、获得子串等。并可与C语言风格字符串双向转换。std::basic_string属于C++STL容器类,用户自定义的类也可以作为它的模板参数,因此也适用C++STLAlgorithm库。

string本质上是以字符作为元素的vector特化版本;不存在0字符结尾这个概念,能装入\0这种数据。

std::basic_string类模板

std::basic_string类模板存储且操纵类似char的对象的序列。该对象类型的性质由特性类模板std::char_traits的实例来提供,并作为std::basic_string的第二个模板参数1。

C++11标准规定:basic_string的元素是连续存储的。即对于basic_strings,有:*(s.begin()+n)==*s.begin()+n,其中n属于[0,s.size())。换句话说,指向s[0]的指针即为指向CharT[]数组的首元素指针。C++11已经禁止了写入时复制(copy-on-write)的实现,因为存在多线程安全问题。一般都采用了小字符串优化(SSO)实现,如VisualC++:

union_Bxty{//storageforsmallbufferorpointertolargerone_Elem_Buf[_BUF_SIZE];_Elem*_Ptr;}_Bx;size_type_Mysize;//currentlengthofstringsize_type_Myres;//currentstoragereservedforstring

GCC从版本5开始,std::string不再采用COW策略。

C++17标准规定,basic_string是AllocatorAwareContainer,SequenceContainer与ContiguousContainer。

模板参数

CharT-字符类型

Traits-字符的特性类

Allocator内部存储的分配器类

成员类型

traits_type模板参数Traits

value_type即Traits::char_type

allocator_type模板参数Allocator

size_type即Allocator::size_type。C++11改为std::allocator_traits::size_type

difference_type即Allocator::difference_type。C++11改为std::allocator_traits::difference_type

reference即Allocator::reference。C++11改为value_type

const_reference即Allocator::const_reference。C++11改为constvalue_type

pointer即Allocator::pointer。C++11改为std::allocator_traits::pointer

const_pointer即Allocator::const_pointer。C++11改为std::allocator_traits::const_pointer

iterator属于RandomAccessIterator

const_iterator属于Constantrandomaccessiterator

reverse_iterator即std::reverse_iterator

const_reverse_iterator即std::reverse_iterator

成员函数

下面列出所有成员函数,其中string是std::basic_string的简写:

构造表示

string::string(构造)

string::~string(析构)

string::operator=-赋值

string::assign–赋值

string::get_allocator–获得内存分配器

字符访问

string::at–访问特定字符,带边界检查

string::operator[]–访问特定字符

string::front–访问第一个字符

string::back–访问最后一个字符

string::data–访问基础数组,C++11后与c_str()完全相同

string::c_str–返回对应于字符串内容的C风格零结尾的只读字符串

string::substr–以子串构造一个新串;参数为空时取全部源串

迭代器

string::begin–获得指向开始位置的迭代器

string::end–获得指向末尾的迭代器

string::rbegin–获得指向末尾的逆向迭代器

string::rend–获得指向开始位置的逆向迭代器

string::cbegin–获得指向开始位置的只读迭代器

string::cend–获得指向末尾的只读迭代器

string::crbegin–获得指向末尾的逆向只读迭代器

string::crend–获得指向开始位置的逆向只读迭代器

容量

string::empty–检查是否为空

string::size–返回数据的字符长度

string::length–返回数据的字符长度,与size()完全相同

string::max_size–返回可存储的最大的字节容量,在32位Windows上大概为43亿字节。

string::reserve–改变string的字符存储容量,实际获得的存储容量不小于reserve的参数值。

string::capacity–返回当前的字符存储容量

string::shrink_to_fit(C++11新增)–降低内存容量到刚好

修改器

string::clear–清空内容

string::insert–插入字符或字符串。目标string中的插入位置可用整数值或迭代器表示。如果参数仅为一个迭代器,则在其所指位置插入0值。

string::erase–删除1个或1段字符

string::push_back–追加1个字符

string::pop_back–删除最后1个字符,C++11标准引入

string::append–追加字符或字符串

string::operator+=–追加,只有一个参数——字符指针、字符或字符串;不像append()一样可以追加参数的子串或若干相同字符

string::copy–拷贝出一段字符到C风格字符数组;有溢出危险

string::resize–改变(增加或减少)字符串长度;如果增加了字符串长度,新字符缺省为0值

string::swap–与另一个string交换内容

string::replace–替换子串;如果替换源数据与被替换数据的长度不等,则结果字符串的长度发生改变

搜索

string::find–前向搜索特定子串的第一次出现

string::rfind–从尾部开始,后向搜索特定子串的第一次出现

string::find_first_of–搜索指定字符集合中任意字符在*this中的第一次出现

string::find_last_of–搜索指定字符集合中任意字符在*this中的最后一次出现

string::find_first_not_of–*this中的不属于指定字符集合的首个字符

string::find_last_not_of–*this中的不属于指定字符集合的末个字符

string::


转载请注明:http://www.nydjfy.com/pxxx/pxxx/15899.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了