c++primer plus第十六章-string类

来源:互联网 发布:淘宝怎么修改好评价 编辑:程序博客网 时间:2024/05/22 03:01

c++primer plus第十六章-string类

1)string类的9个构造函数

第一:string(const char *s)。将string对象初始化为s指向的NBTS(空格符结束的字符串)。


第二:string(size_type n, char c)。创建一个包含n个元素的string对象,其中每个元素都被初始化为字符c。


第三:string(const string & str)。将一个string对象初始化为string对象str(复制构造函数)。


第四:string()。创建一个默认的string对象,长度为0(默认构造函数)。


第五:string(const char *s, size_type n)。将string对象初始化为s指向的NBTS的前n个字符,即使超过了NBTS结尾。


第六:template<class Iter> string(Iter begin, Iter end)。将string对象初始化为区间【begin,end)内的字符,其中begin和end的行为就像指针,用于指定位置,范围包括begin在内,不包含end


第七:string(const string &str, string size_type pos =0, size_type n=npos)。将一个string对象初始化为对象str中从位置pos开始到结尾的字符,或从位置pos开始的n个字符


第八:string(string && str) noexcept。这是c++11新增的,它将一个string对象初始化为string对象str,并可能修改str(移动构造函数)。


第九:string(initializer_list<char>il)。这是C++11新增的内容,它将一个string对象初始化为初始化列表il中的字符。


2)getline():从输入中读取字符,并将其存储到目标string中,直到发生以下三种情况:

第一:到达文件尾部,这种情况下,输入流的eofbit将被设置,这意味着方法fail()和eof()都将返回true。

第二:遇到分界字符(默认为\n),这种情况下,将把分界字符从输入流中删除,但不存储它。

第三:读取的字符数达到最大允许值(string::npos和可供分配的内存字节数中较小的一个),在这种情况下,将设置输入流的failbit,这意味着方法fial()将返回true。


3)重载find()方法

第一:size_type find(const string &str, size_type pos=0) const

从字符串的pos位置开始,查找字符串str。如果找到,则返回该字符串首次出现时其首字符的索引;否则,返回string::npos。


第二:size_type find(const char *s, size_type pos=0) const

从字符串的pos位置开始,查找字符串s。如果找到,则返回该字符串首次出现时其首字符的索引;否则,返回string::npos。


第三:size_type find(const char *s, size_type pos=0, size_type n) const

从字符串的pos位置开始,查找字符串s的前n个字符组成的子字符串。如果找到,则返回该字符串首次出现时其首字符的索引;否则,返回string::npos。


第四:size_type find(char ch, size_type pos=0) const

从字符串的pos位置开始,查找字符ch。如果找到,则返回该字符串首次出现时其首字符的索引;否则,返回string::npos。


string库还提供了相关的方法:

rfind()方法查找子字符串或字符最后一次出现的位置;

find_first_of()方法在字符串中查找参数中任何一个字符首次出现的位置。

find_last_off()方法在字符串中查找参数最后一次出现的位置。

find_first_not_of()方法在字符串中查找第一个不包含在参数中的字符。


4)智能指针

这三个智能指针模板(auto_ptr、unique_ptr和shared_ptr)都定义了类似指针的对象,可以将new获得(直接或间接)的地址赋给这种对象。当智能指针过期时,其析构函数将使用delete来释放内存。因此,如果将new返回的地址赋给这些对象,将无需记住稍后释放这些内存:在智能指针过期时,这些内存将自动被释放。

要创建智能指针对象,必须包含头文件memory,该文件模板定义。然后使用通常的模板语法来实例化所需类型的指针。


5)#include<memory>

void remodel(std::string &str)

{

std::auto_ptr<std::string> ps(new std::string(str));

... ...

if(weird_thing())

throw exception();

str= *ps;

return ;

}

包含3个步骤:

第一:包含头文件memory;

第二:将指向string的指针替换为指向string的智能指针对象;

第三:删除delete语句。



0 0