• 【STL】string类 (上)& <vector>和<list>的简单使用


    目录

    一,什么是 STL 

    二,STL 的六大组件

    三,标准库中的 string 类

    1,string 类 

    2,string 类的常用接口

    1,string类对象的常见构造

    2,string(const string& str)

    3,string (const string& str, size_t pos, size_t len = npos);

    4,string (const char* s )

    5,string (const char* s,size_t n);

    6,string (size_t n,char c);

    3,遍历和访问

    四,iterator 迭代

    五,逆置字符串 reverse

    六, 栈

    七,队列


    一,什么是 STL 

    STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

    二,STL 的六大组件

    三,标准库中的 string 类

    string 类的介绍:

    https://cplusplus.com/reference/string/string/?kw=string

    1,string 类 

    总结:

    1,string 是表示字符串的字符串类

    2,该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作 string 的常规操            作。

    3,string 在底层实际是:basic_string 模板类的别名,typedef basic_string string;

    4,不能操作多字节或者变长字符的序列。

    在使用 string 类时,必须包含 #include 头文件以及 using namespace std;

    2,string 类的常用接口

    1,string类对象的常见构造

    详情:cplusplus.com/reference/string/string/string/

    函数名称功能说明
    string()构造空的 string 类对象,即空字符串
    string(const string& str)拷贝构造函数
    string (const string& str, size_t pos, size_t len = npos);
    截取从 pos 开始 npos 长度的字符串
    string (const char* s );用C-string 来构造 string 类对象
    string (const char* s,size_t n);截取字符串前 n 个字符
    string (size_t n,char c);

    string 类对象中包含 n 个字符c

    2,string(const string& str)

    拷贝构造函数

    1. #include
    2. #include
    3. using namespace std;
    4. int main()
    5. {
    6. string s1 = "abc";
    7. string s2(s1);
    8. cout << s2 << endl;
    9. return 0;
    10. }

    记得加上头文件  #include

    3,string (const string& str, size_t pos, size_t len = npos);

    截取从 pos 开始 npos 长度的字符串

    1. int main()
    2. {
    3. string s1 = "hello world";
    4. string s3 (s1, 2, 5);
    5. cout << s3 << endl;
    6. string s4(s1, 0, 10);
    7. cout << s4 << endl;
    8. string s5(s1, 3);
    9. cout << s5 << endl;
    10. return 0;
    11. }

    第一个数:目标字符串

    第二个数:代表下标,从下标位置开始;

    第三个数:代表长度,如果没写的话就一直读取到 ' \0 ' 为止;

    4,string (const char* s )

    用C-string 来构造 string 类对象

    1. int main()
    2. {
    3. string s1("hello world");
    4. cout << s1 << endl;
    5. string s2("hahaha 666");
    6. cout << s2 << endl;
    7. return 0;
    8. }

    5,string (const char* s,size_t n);

    截取字符串前 n 个字符

    1. int main()
    2. {
    3. string s1("hello world",5);
    4. cout << s1 << endl;
    5. string s2("hahaha 666",2);
    6. cout << s2 << endl;
    7. return 0;
    8. }

    第一个数:要写双引号字符串形式的,要不然会和string (const string& str, size_t pos, size_t                      len = npos);起冲突;

    第二个数:代表读取的个数,从头开始;

    6,string (size_t n,char c);

    string 类对象中包含 n 个字符c

    1. int main()
    2. {
    3. string s1(10,'x');
    4. cout << s1 << endl;
    5. string s2(5,'a');
    6. cout << s2 << endl;
    7. return 0;
    8. }

    3,遍历和访问

    1. int main()
    2. {
    3. string s1("hello world");
    4. cout << s1.size() << endl;
    5. cout << s1.length() << endl;
    6. int i = 0;
    7. for (i = 0; i < s1.size(); i++)
    8. {
    9. cout << s1[i] <<" ";
    10. }
    11. return 0;
    12. }

    s1.size() 和 s1.length 是求字符串长度的;

    访问时可以直接像数组一样用 [ 下标 ] 的形式;

    四,iterator 迭代

    string 类给我们提供了一个 迭代 iterator,来帮助我们进行遍历;

    1. int main()
    2. {
    3. string s1("hello world");
    4. string::iterator it = s1.begin();
    5. while (it != s1.end())
    6. {
    7. cout << *it << " ";
    8. it++;
    9. }
    10. return 0;
    11. }

    string::iterator 是一个类型,it 可以把它看作是一个指针;

    s1.begin() 就是相当于第一个元素的指针地址,s1.end() 相当于最后 \0 的地址;

    五,逆置字符串 reverse

    我们先来逆置一个字符串

    1. int main()
    2. {
    3. string s1("hello world");
    4. int begin = 0, end = s1.size()-1;
    5. while (begin< end)
    6. {
    7. int tmp = s1[begin];
    8. s1[begin] = s1[end];
    9. s1[end] = tmp;
    10. begin++;
    11. end--;
    12. }
    13. cout << s1 << endl;
    14. return 0;
    15. }

     reverse 逆置字符串

    1. int main()
    2. {
    3. string s1("hello world");
    4. reverse(s1.begin(), s1.end());
    5. cout << s1 << endl;
    6. return 0;
    7. }

    是不是简单多了;

    六,

    我们写栈再也不用手搓了,直接用c++库里面的栈就可以了,需要包含头文件 #include

    1. int main()
    2. {
    3. vector<int> s1;
    4. s1.push_back(1);
    5. s1.push_back(2);
    6. s1.push_back(3);
    7. s1.push_back(4);
    8. s1.pop_back();
    9. vector<int>::iterator st = s1.begin();
    10. while (st != s1.end())
    11. {
    12. cout << *st << " ";
    13. st++;
    14. }
    15. return 0;
    16. }

    而且迭代 iterator 对栈也一样有用;

    对逆置函数 reverse 也一样有效果;

    1. int main()
    2. {
    3. vector<int> s1;
    4. s1.push_back(1);
    5. s1.push_back(2);
    6. s1.push_back(3);
    7. s1.push_back(4);
    8. s1.pop_back();
    9. reverse(s1.begin(), s1.end());
    10. vector<int>::iterator st = s1.begin();
    11. while (st != s1.end())
    12. {
    13. cout << *st << " ";
    14. st++;
    15. }
    16. return 0;
    17. }

    七,队列

    我们以后也不用手搓队列了,c++库里面也有队列,我们直接用即可,需要包含头文件 #include

    1. int main()
    2. {
    3. list<int> sl;
    4. sl.push_back(1);
    5. sl.push_back(2);
    6. sl.push_back(3);
    7. sl.push_back(4);
    8. sl.pop_back();
    9. list<int>::iterator lt = sl.begin();
    10. while (lt != sl.end())
    11. {
    12. cout << *lt << " ";
    13. lt++;
    14. }
    15. return 0;
    16. }

    也是一样的用法,也同样适用于 迭代 iterator;

    逆置 reverse 函数也是OK的;

    1. int main()
    2. {
    3. list<int> sl;
    4. sl.push_back(1);
    5. sl.push_back(2);
    6. sl.push_back(3);
    7. sl.push_back(4);
    8. sl.pop_back();
    9. reverse(sl.begin(), sl.end());
    10. list<int>::iterator lt = sl.begin();
    11. while (lt != sl.end())
    12. {
    13. cout << *lt << " ";
    14. lt++;
    15. }
    16. return 0;
    17. }

  • 相关阅读:
    pycharm(python)bug处理记录
    案例研究|腾讯音乐娱乐集团与JumpServer共探安全运维审计解决方案
    woocommerce虚拟商品和可下载商品介绍
    网络协议05 -网络层
    Baklib|如何才能做好企业内部知识管理?
    第五章:最新版零基础学习 PYTHON 教程—Python 字符串操作指南(第四节 - Python 中的字符串反转6种不同的方式方法)
    Nvidia Jetson平台 JP4.2.1版本GStreamer视频采集异常问题调试记录
    45-命令行基础操作
    Python遥感开发之批量掩膜和裁剪
    Spring中Setter注入详解
  • 原文地址:https://blog.csdn.net/m0_71676870/article/details/134451209