• 标准库类型string和vector


    一、命名空间

    	std::cin
    
    • 1

    std就是命名空间,
    这个的含义是 :编译器应该从操作符左侧的名字所示的作用域std中去寻找cin

    另一种方式就是在开头显式进行说明:

    using std::cin;
    
    • 1

    这样一来后续就不用再去在每条语句中显式说明了。

    需要注意的是,一般在头文件中不要包含命名空间的声明,这种声明会拷贝到所有引用此头文件的文件中去,可能会导致一些不可预料的错误和冲突

    二、string类型

    string类型:可变长字符串;

    存在于头文件:#include中,而且定义于std命名空间中。

    2.1 初始化string对象

    在这里插入图片描述
    其实这些初始化方式主要可以分为两类:
    (1)拷贝初始化
    使用了一个变量去初始化了另一个变量,被初始化变量是其他变量的副本

    表征的话有“=”号的都是拷贝初始化

    比如:

    string s2 = s1
    string s3 = "value"
    
    • 1
    • 2

    (2)直接初始化
    直接将初始值拷贝到变量中去

    比如:

    string s3("value")
    string s4(n, 'c')
    
    • 1
    • 2

    2.2 string对象的操作

    在这里插入图片描述
    总共来说有这些操作,分为以下几类

    2.2.1 读写操作

    (1)采用数据流iostream来对string进行读写

    比如:

    string s1, s2;
    cin>>s1>>s2;
    cout<<s1<<s2<<endl;
    
    • 1
    • 2
    • 3

    其中cin在读取时会忽略开头的空白(空格、制表符、换行符等),在遇到下一个空白时停止,算一个string变量

    (2)读取任意数量的string

    string类型结束时会有一个结束符在,因此可以一直循环,直到检测到结束符为止:

    string s1;
    while(cin>>s1){
    	cout<<s1<<endl;
    }
    
    • 1
    • 2
    • 3
    • 4

    也可以使用getline按行去读入,直到文件末尾结束getline在进行文件读写时使用较多,主要因为这样可以保留每一行中的空白字符:

    string s1;
    while(getline(s, s1)){
    	cout<<s1<<endl;
    }
    
    • 1
    • 2
    • 3
    • 4

    2.2.2 获取大小

    使用size()函数可以返回字符串中的字符数量,使用字符数量可以分段对于字符串进行操作

    此处需要注意的是size函数的返回值类型

    这个地方的返回值并不是简单的int,而是string::size_type类型,这种类型的细节不需要关注,需要注意的是它是无符号的

    这样一来就得避免和有符号数去混用,比如一个负数n: 判断:s.size() < n,无符号数和负数n比较几乎都是true,导致错误

    同时也经常使用empty()函数来判断字符串是否为空,当字符串为空时返回true,反之false。

    2.2.3 其他string对象操作

    (1)比较string对象
    对于两个string对象的比较可以直接采用“==”、“>”、“<“、”<=“、”>="运算符进行比较。

    ==会依次比较string中的每一个字符,如果长度且字符相同则返回true

    比较大小主要依次比较的是字母之间的相对顺序
    (2)string对象相加

    string对象之间相加可以直接使用”+“号

    string s1 = "hello, ", s2 = "world";
    string s3 = s1 + s2;	//s3(hello, world)
    
    • 1
    • 2

    而且string对象也可以直接和字面值进行相加,比如:

    string s1 = "hello";
    string s2 = s1 + ",";
    
    //两个字面值不能相加,是错误的
    string s3 = "hello" + ",";
    string s4 = "hello" + "," + s1;
    //这样则是正确的
    string s4 = "hello" + s1 + ",";
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    (3)访问string对象
    可以使用for循环依次访问

    for (auto c:str){
    ...
    }
    
    • 1
    • 2
    • 3

    也可以使用下标直接进行访问

    三、vector

    首先明确一点,vector是什么?

    vector是一个类模板

    模板可以看作是类或者函数编写的一份说明说。利用模板可以创建类或者函数,这就是实例化,实例化的时候需要指明类型,如:

    vector<int>number;
    vector<vector<string>>str;
    vector<shape>sha;
    
    • 1
    • 2
    • 3

    vector可以容纳大多数类型的对象,但是由于引用不是对象,所以不能是引用类型。

    3.1 定义和初始化vector对象

    在这里插入图片描述

    3.2 vector操作

    在这里插入图片描述

  • 相关阅读:
    Unreal Engine 4 + miniconda + Python2.7 + Pycharm
    SpringBoot 2 配置文件 2.5 配置文件分类
    Binlog 中添加 seqnum 和 parent 两个字段
    P38 Border边框
    基于攻防博弈的网络防御决策方法研究综述
    XCTF之新手Web题目
    visual studio插件开发-Menu
    代码随想录二刷 Day 43
    C++ 32盏灯,利用进制和 与 或 进行设计
    qml var类型详解
  • 原文地址:https://blog.csdn.net/weixin_41997940/article/details/127327775