zoukankan      html  css  js  c++  java
  • 【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;
    }
    

  • 相关阅读:
    背水一战 Windows 10 (61)
    背水一战 Windows 10 (60)
    背水一战 Windows 10 (59)
    背水一战 Windows 10 (58)
    背水一战 Windows 10 (57)
    背水一战 Windows 10 (56)
    背水一战 Windows 10 (55)
    背水一战 Windows 10 (54)
    背水一战 Windows 10 (53)
    背水一战 Windows 10 (52)
  • 原文地址:https://www.cnblogs.com/ruan875417/p/4495579.html
Copyright © 2011-2022 走看看