• c++中的String


    String

    String是一个类模版,可以定义一个字符/字符串对象。
    字符顺序表

    定义对象的方式

    定义方式有很多重要的就这几种

    	string s1;
    	string s2("hello word");
    	string s3 = s2;
    	string s4(s2);
    
    • 1
    • 2
    • 3
    • 4

    成员函数

    下面的成员函数中有些是很不常用的,这里会整理出常用的几个
    在这里插入图片描述

    operator=

    让一个string对象 可以赋值成另一个 string对象/字符串/字符

    int main()
    {
    	string s1 = "hello";
    	cout << s1;
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    begin/end

    begin: 配合迭代器等东西使用,指向对象的开始
    end:配合的迭代器使用,指向对象的结束

    	string::iterator it = s1.begin();
    	while (it != s1.end())
    	{
    		cout << *it << " ";
    		it++;
    	}
    	cout << endl;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    size

    定义的对象的长度

    string s1("hello");
    cout<<s1.size();
    
    • 1
    • 2

    capacity

    当前定义的对象的容量大小

    string s1("hello");
    cout << s1.capacity() << endl;
    
    • 1
    • 2

    reserve

    设置容量
    每个编译器的容量可能大小有差异,取决于这个编译器使用什么版本的STL
    如果当前对象的capacity小于reserve 那么就是扩容
    在vs下是 1.5倍的扩容
    在gcc下是 2倍扩容
    如果 capacity>reserve 那么有可能缩容
    在vs下 reserve 是不会缩容的
    在gcc下 是会缩到 reserve的长度,当reserve

    int main()
    {
    	string s1;
    	//检测扩容机制
    	//每个编译器 扩容都不同
    	int a = s1.capacity();
    	string s2("hello word");
    	s1.reserve(500);
    	//如果确定自己需要多少空间
    	//reserve 设置容量
    	//不同编译器 扩容 会扩500或者以上
    	//在vs下 reserve下 没数据下/有数据下:只会扩容
    	//在gcc下 没数据可以缩容
    	//有数据下如果缩的比有效数据低 那么 他会缩到 有效数据的结尾
    	//reserve 不会影响数据  只影响容量
    	//g++ 会根据你扩容直接扩容
    	//vs会有对齐规则 扩容多一点
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    rsize

    和reserve类似,rsize是设置容量,并且会影响数据
    如果是扩容的话 那么他会在有效数据后扩容并且初始化成\0
    resize > capacity 那么就是扩容+尾插
    如果 size 如果在这个区间 只会插入数据
    如果 n 删除数据 空间不变 保留前n个数据

    //rsize -既影响容量 又影响数据
    cout << s2.size() << endl;
    cout << s2.capacity() << endl;
    //resize 如果是扩容的话 那么他会在有效数据后扩容并且初始化成\0
    //resize > capacity 那么就是扩容+尾插
    s2.resize(100);
    //s2.resize(100,'x');如果是这样子的话 就是有效数据后插入x 到size结束
    cout << s2.size() << endl;
    cout << s2.capacity() << endl;
    
    //如果 size
    s2.resize(12);
    cout << s2.size() << endl;
    cout << s2.capacity() << endl;
    //如果 n删除数据 空间不变 保留前n个数据
    s2.resize(5);
    cout << s2.size() << endl;
    cout << s2.capacity() << endl;
    cout << s2;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    operator+=/append/push_back

    这些都是插入成员函数
    operator+= 直接尾部插入···
    append 插入一个string对象/一个插入···
    push_back 尾插

    int main()
    {
    	string s1("hello word ");
    	// append 插入 一个字符串 ···
    	s1.append("dabai ");
    
    	string s2 = " aaaaaaa";
    	//+= 插入
    	s1 += 'x';
    	s1 += 'word';
    	s1 += s2;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    operator[]/at

    下标访问

    	//at()==[]
    	string s2("hello word");
    	cout << s2.at(20) << endl;
    	return 0;
    
    • 1
    • 2
    • 3
    • 4

    如果对你有帮助的话点一下赞,谢谢

  • 相关阅读:
    跨平台应用开发进阶(四十)自定义插件及引用
    AcWing 383. 观光 题解(最短路)
    初阶JavaEE(15)(Cookie 和 Session、理解会话机制 (Session)、实现用户登录网页、上传文件网页、常用的代码片段)
    数据采集:智能制造的基础环节
    第二十三章 Classes - 属性
    Shell编程实际应用
    前端开发面试题—JavaScript循环语句
    Java学习【IO流:深入理解与应用(上)】
    AIE有机荧光探针/荧光高分子纳米微球AIE-PEN FPNs/AIE有机荧光分子带电荷微球
    css过渡属性的简单使用
  • 原文地址:https://blog.csdn.net/dabai__a/article/details/134476434