• 【c++ primer读书笔记】【第3章】字符串、向量和数组


    一、标准库类型string

    1.string的初始化

    string s1;           //默认初始化,s1是一个空串
    string s2(s1);        //直接初始化,s2是s1的副本
    string s2=s1;        //拷贝初始化,s2是s1的副本
    string s3(“value”);   //直接初始化,s3是字面值“value”的副本
    string s3=“value”    //拷贝初始化,s3是字面值“value”的副本
    string s4(n,’a’);      //直接初始化,s4初始化为由连续n个字符a组成的串
    

    2. getline函数读取整行文本,直到遇到换行符为止。

    3. size函数返回string对象中字符的个数,返回值是一个string::size_type类型的值,它是无符号数。

    4. 关系运算符<,<=,>,>=按字典顺序比较两个string对象的大小。

    5. empty成员函数表示当string对象为空时返回true,否则返回false;

        size成员函数表示返回string对象中字符的个数。

    6.加法运算符的两次的运算对象至少有一个是string;

    string s2 = s1 + ""; //正确
    string s2 = "hello " + " world"; //错误

    7.  用范围for操作string中的每个字符

    string str("helloworld");
    for(auto c:str)
       cout<<c<<endl;

    8.  下标运算符接收的参数是string::size_type类型的值,返回值是该位置字符的引用

    二、标准库类型vector

    1.  vector的初始化

    vector<T> v1;    //默认构造函数,初始化的v1为空vector
    vector<T> v2(v1); //将v1中的元素全部复制到v2中,v1中对象的类必须与v2的类相同
    vector<T> v2=v1;  //等价于vector<T> v2(v1)
    vector<T> v3(n);  //v3含有n个重复执行了值初始化的对象
    vector<T> v4(n, v);  //v4含有n个值为v的元素
    vector<T> v5{a,b,c…};  //v5包含了初始值个数的元素,每个元素被赋予相应的初始值
    vector<T> v5={a,b,c…};  //等价于vector<T> v5{a,b,c…}
    

    2.在上面第4种情况的初始化中,

    如果vector对象的元素是内置类型,如int,则元素初始值自动设为0;

    如果T为某种类类型并含有默认的构造函数,则T会被按照构造函数进行初始化;

    如果不符合以上两种情况,在初始化vector时一定要指出如何初始化其中元素。

    如果循环体内部包含有向vector对象添加元素的语句,则不能用范围for循环。

    3. vector的empty和size两个成员函数和string的同名成员函数功能一致

    三、迭代器

    1. 每个标准库容器都会定义迭代器,用于遍历其中的每一个元素。begin成员函数负责指向第一个元素的迭代器,end函数负责指向尾元素的下一位置的迭代器,也就是该迭代器指向不存在的尾后元素

    2. 迭代器类型

    vector<int>::iterator it;  //it能读写vector<int>的元素
    vector<int>::const_iterator it; //it只能读vector<int>的元素

    3. 迭代器运算

    只要迭代器指向同一个容器中的元素或者尾元素的下一位置,就能相减,结果是迭代器的距离,类型是difference_type;

    四、数组

    1.数组不允许拷贝和赋值

    int a[]={1,2,3};
    int a2[]=a;   //错误,不能用一个数组初始化另一个数组
    a2=a       //错误,不能把一个数组赋值给另一个数组

    2. c++11引入两个名为begin和end函数

    #include<iostream>
    using namespace std;
    int main(){
        int ia[]={1,2,3,4,5,6,7,8};
        int *pbeg=begin(ia);//指向ia首元素的指针
        int *pend=end(ia);//指向ia尾元素的下一位置的指针
        for(;pbeg!=pend;++pbeg)
            cout<<*pbeg<<" ";
        cout<<endl;
    
        system("pause");
        return 0;
    }
    

  • 相关阅读:
    CF div2 332 A
    vector resize 错误用法
    linux命令之 chown
    dlmalloc 编译 链接
    C++ 类 访问限制
    C++ 编译多态 运行多态
    libevent 编译 Windows
    浮点数小记
    NYOJ 435 棋盘覆盖(二)
    HDU 3555 Bomb 简单数位DP
  • 原文地址:https://www.cnblogs.com/ruan875417/p/4495579.html
Copyright © 2020-2023  润新知