• 第三张 标准库类型(using,string,vector)


    第三张  标准库类型(usingstringvector

    一、命名空间的using声明

    1、使用using声明,我们就可以直接引用名字,而不需要再引用该名字的命名空间:(参考下面部分代码)

    #include <string>

    #include <iostream>

    using std::cin;

    using std::string ;

    int main()

    {

    string s; 正确,原来std::string,现在改成string

    cin >> s; 正确

    cout << s; 有错,因为上面没有using std::cout

    std:: cout << s; 正确

    需要注意的是,每个名字都要一个using声明。此外,在一种情况下,必须总是使用完全限定的标准库名字,即在头文件中。(会引起不必要的错误)

    二、标准库string类型

    1string标准库支持几个构造函数:

    String s1; 默认构造函数,s1为空串

    String s2(s1); s2初始化为s1的一个副本

    String s3("Value") ; s3初始化为一个字符串字面值副本

    String s4(n,'c'); s4初始化为字符‘c’的n个副本

    2string 对象的读写

    string s

       Cin >> s;   string类型的输入操作符:读取并忽略开头所有的空白字符(空格,换行符,制表符); 读取字符直到再次遇到空白字符,才终止读取。如:输入“hello world”,输出 “hello”,且不含任何空格。

    3、用getline 读取整行文本

    Getline接受两个参数,getlinecinline); 函数从输入流的下一行读取,并保存读取的内容到string中,但不包括换行符。另外,getline并不忽略行开头的换行符,只要getline遇到换行符,即便是第一个字符,也将停止输入并返回。如果第一个字符是换行符,则line为空串。

    4string对象的操作

    假设 string s

    S.empty()  如果s为空串,则返回true,否则返回false

    S.size()    返回s中字符的个数

    S[n]       返回s中位置为n的字符,从0开始计数。

    S1+s2 把两个串连接成一个新字符串,并返回。

    S1=s2 s1内容替换为s2的副本

    S1==s2 比较s1,s2的内容,相等则返回true,否则返回false

    !=, < , <= , > , >=  C语言类似.

    注意:(1s.size()返回的是string::std::size_type类型的值,特别的,不能将这个值赋给一个int 变量!

    2)连接字符串字面值时候,操作符的左右操作数必须至少有一个是string类型的。

    例如: string s3= s1+ " , " ;           string s5=s1+" , "+ "world" ; s5中,先是将s1" , " 相加组成一个新的string对象,然后再与"world " 相加。

    错误示范: string  s4= "hello " + " , " ; 两个字符串字面值相加是非法的。

    String   s6= "hello " +  " , " + s2;  

    (3)在string对象的索引变量最好也是用string::size_type类型,因为方便比较:  ix != s.size()  (越界控制)

    (4)String对象中字符的处理,见C++Primer P77

    三、标准库vector 类型

    1vector是同一类型的对象的集合,每个对象都有一个对应的整数索引值。常称vector为容器,它包含的对象都必须是同一类型的。(假设 用using做出了相应声明: #include<vector>

     Using std:: vector ;

    2、定义vector的对象:需要指定类型和一个变量的列表。

    如:vector<int>  ivec;

    3vector对象的定义和初始化

    四个构造函数:

    1vector<T>  v1; 类型为T的对象v1为空

    (2)  vector<T>  v2(v1);  v2v1的一个副本

    (3)  vector<T>  v3(n,i); v3包含n个值为i的元素

    (4)  vector<T>  v4(n); v4含有值初始化的元素的n个副本

    4vector对象的操作

      v.empty()   如果v为空,则返回true,否则返回false

    v.size()     返回v中元素的个数

    v.push_back(t) v的末尾增加一个值为t的元素

    v[n]        返回v中位置为n的元素,从0开始计数。

    v1=v2 把v1元素替换为v2中元素的副本

    v1==v2 如果v1,v2相等则返回true,否则返回false

    !=, < , <= , > , >=  C语言类似.

    注意:使用size_type类型时,必须指出该类型时在哪里定义的。Vector类型总是包括vector的元素类型: vector<int> :: size_type 

    5、下标操作不能添加元素

    因为下标只能用于获取已存在的元素,而当一个空对象没有元素时,是无法通过下标操作获取元素的。已存在的元素才能用下标操作进行索引,而通过下标操作赋值时,不会添加任何元素。

    -------------------------------------------------------------------------------------------------------------------------------------------------------------

    今天学习了const,typedef,枚举和现在贴上来的标准库string类型和vector类型,以及using命名声明。重点是现在贴上来的笔记了,感觉在看书过程中思路还算清晰吧,遇到一个小问题,问师兄和百度后最终解决了,就是using在头文件的使用,在上面的笔记也有记录。 今晚师兄跟我聊了一下vector类型,他告诉我,如果在学完这章书后能够用vector实现一个栈,那就算是真正学懂了!这也算学完这章书的一个小目标吧,今天写在这里,我会在学完这章后写一个出来的,到时候再贴上!加油!          23:00

  • 相关阅读:
    android 限定符参考
    Fragment生命周期
    碎片和活动之间通信
    Fragment碎片的使用
    使用Intent传值及回传值
    Calendar 获取年 月 日 时 分 秒
    Python函数:2018-07-30
    Python 字符串 2018-07-27
    Python 异常 2018-08-01
    __future__ 模块 2018-08-09
  • 原文地址:https://www.cnblogs.com/ss815367696/p/2585459.html
Copyright © 2020-2023  润新知