标准库之字符串——C++11(十五)

#include<string>
string compose(const string& name, const string& domain)
{
    return name + '@' + domain;   // 采用移动构造函数返回,不存在拷贝,会很高效
}

s += "abc";  ////追加字符
string m = name.substr(2,5); //提取子字符串
name.replace(0, 5, "abc");  // 替换从0开始、长度为5的子串为"abc"
name.c_str();  //转化为C风格字符串,返回指向name字符的指针
auto s = "cat"s;  // std::string类型
auto p = "dog";  //C风格字符串:const char*类型

字符串string的实现:

template<typename Char>
class basic_string {
    // Char类型的字符串
}
using string = basic_string<char>;  //定义别名
//用户可定义任意字符类型的字符串,如中文简体
using Cstring = basic_string<Cchar>;

字符串视图string_view:

它基本上就是一个(指针,长度)对,表示一个字符序列,就类似golang中切片的概念。

可通过string_view实现对一个连续字符序列的访问,其类似于指针或引用,因为它并不拥有它所指向的字符。

string_view是其字符的只读视图。

String cat(string_view sv1, string_view sv2)
{
    string res(sv1.length()+sv2.length());
    char* p = &res[0];
    for (char c: sv1)
        *p++ = c;
    copy(sv2.begin(), sv2.end(), p); //类似迭代器
}
string a = "abc";
auto s1 = cat(a, "mcd"); // string和const char*
auto s2 = cat("abd", "ddd"sv); // const char* 和string_view
auto s3 = cat({&king[0],2}, "hdd"sv); //abhdd

猜你喜欢

转载自www.cnblogs.com/share-ideas/p/11921297.html