• c++ primer 3 标准库类型


    3.1 命名空间的using声明

    using声明是对某个命名空间做引入。主要作用是简化代码编写。

    比如用cout的三种方式:

    using namespace std;
    using std::cout;
    std::cout<<s;

    3.2 标准库string类型

    定义和初始化

    #include <string>
    using std::string

    string s1 ;  // 调用默认构造函数初始化对象

    strng s2(s1) ; // 将S2初始化为S1的一个副本

    string s3("value") ; // 用一个字符串值初始化对象

    string s4(n,'c') ; // 用N个字符‘C’组成字符串作为初始化s4的值

    string对象的读写

    cin>>str;  读取并忽略开头所有空白字符(空格,换行符,制表符),直到再次遇到空白字符为止

    getline(cin,str)  以换行符为读取结束标志,但并不忽略开头换行符,如果第一个字符是换行符,置空

    string对象的操作

    s.empty() ;   // 判断s是否为空,相当于s.size()==0
    s.size() ;       // s的长度
    s[n] ;            // n位置的字符(左值返回)
    s1+s2 ;         // 返回s1和s2连接的串
    s1=s2 ;         // 把s1替换为s2的副本
    s1==s2 ;      // 判断s1,s2是否相等
    !=,<,<=,>,>=    // 按字典顺序比较  若一个字符串为另一个的前缀,这长度长的大

    size操作返回string::size_type()类型,不要把size返回的结果赋给一个int变量,string类型下标操作也需要用size_type类型

    为什么不用int而新创造一个类型呢,原因有如下两点:

    1. 取值范围不同,int有固定的取值范围,并且可以取负数,但字符串长度是不可能为负的,并且长度的大小很可能会超过int的范围而导致溢出

    2. int的范围大小与机器相关,有的机器上范围大些,有点机器小一些。但是字符串长度应该是个不能随机器发生大小改变的值,所以即使用无符号int来表示串大小也是不合适的

    这种思想是配套类型,很多库中都用到

    字符串字面值的连接,+操作符的左右操作数必须至少有一个string类型

    string s1 = "hello" + s2

    string s3 = "hello" + "world"  错

    cctype

    isalnum(c) ; // 假如c是字母或数字,则为true

    isalpah(c) ;  // 假如c是字母,则为true

    iscntrl(c) ;   // 假如c是控制字符,则为true

    isdigit(c) ;   // 假如c是数字,则为true

    isgraph(c) ; // 假如c不是空格,则为true

    islower(c) ; // 假如c是小写字母,则为true

    isprint(c) ;  // 假如c是可打印的字符,则为true

    ispunct(c) ; // 假如c是标点符号,则为true

    isspace(c) ; // 假如c是空白字符,则为true

    isupper(c) ; // 假如c是大写字母,则为true

    isxdigit(c) ; // 假如c是十六进制数,则为true

    tolower(c) ; // 假如c是大写字母,则返回小写字母形式(对应的int值),否则返回c。

    toupper(c) ;// 假如c是小写字母,则返回大些字母形式(对应的int值),,否则返回c。

    3.3 标准vector类型 

    3.4 迭代器简介

    c++ primer 9 顺序容器

    强调几点:

    1. 容器下标不能用作添加元素,只能用作获取元素,仅能对已存在的元素进行下标操作

    2. const_iterator自身能改变,指向的值不能修改,注意与const类型的iterator的区别

     1 vector<string>::const_iterator iter  // 定义一个代表常量的迭代器,和普通迭代器唯一不同的就是不能通过解引赋值
     2 
     3 *iter = "new value";                 // 这是不允许的,因为const_iterator告诉编译器我代表的是一个常量,所以不能通过任何手段改变其值
     4 
     5 const vector<string>::iterator iter  // 定义一个常迭代器,迭代器代表的变量,但迭代器本身是常量,所以可以更改代表的内容但无法更改迭代器
     6 
     7 *iter = "new value";                 // 没问题
     8 iter ++                              // 不允许,迭代器是常量所以无法让他指向其他项
     9 
    10 const vector<string>::const_iterator iter  // 这样定义的迭代器只能读取初始化指向的列表项内容,既无法向后移动迭代器也无法更改项值内容

    3. 迭代器的算术操作有两种:加上或减去一个整数值,两个迭代器相减,但绝对没有两个迭代器相加

    习题3.14 把vector<string> 中的小写变大写

     1 #include <iostream>
     2 using namespace std;
     3 #include <vector>
     4 #include <cctype>
     5 #include <string>
     6 
     7 int main()
     8 {
     9     vector<string> vec;
    10     string str;
    11     cout<<"enter some string(ctrl + z to end)"<<endl;
    12     while(cin>>str)
    13         vec.push_back(str);
    14 
    15     vector<string>::iterator ite;
    16     for(ite = vec.begin();ite != vec.end();ite++)
    17     {
    18         for(int i = 0;i < (*ite).size();i++)
    19             (*ite)[i] = toupper((*ite)[i]);
    20         cout<<*ite<<" ";
    21     }
    22     cout<<endl;
    23 
    24     getchar();
    25     return 0;
    26 }

    3.5 标准bitset类型

    看书

  • 相关阅读:
    ABA问题怎么解:AtomicStampedReference和AtomicMarkableReference
    原子类型累加器
    Spring Boot使用嵌入式容器,那怎么配置自定义Filter呢
    痞子衡嵌入式:语音处理工具pzh-speech诞生记
    痞子衡嵌入式:串口调试工具pzh-com诞生记(6)- 打包发布(PyInstaller3.3.1)
    痞子衡嵌入式:串口调试工具pzh-com诞生记(5)- 软件优化
    痞子衡嵌入式:串口调试工具pzh-com诞生记(4)- 联合调试(vspd, sscom, PyCharm2018.2)
    痞子衡嵌入式:串口调试工具pzh-com诞生记(3)- 串口功能实现(pySerial)
    痞子衡嵌入式:串口调试工具pzh-com诞生记(2)- 界面构建(wxFormBuilder3.8.0)
    痞子衡嵌入式:极易上手的可视化wxPython GUI构建工具(wxFormBuilder)
  • 原文地址:https://www.cnblogs.com/raichen/p/4959469.html
Copyright © 2020-2023  润新知