c++ 字符串、向量和数组 2018.3.30


1、标准库类型string表示可边长的字符序列,定义在命名空间std中,要使用的话:

        #include <string>

        using std::string;

        string s1;

2、读取未知数量的string对象:

        while (cin >> word)...

3、使用getline读取一整行

    getline从输入流中读取内容,直到遇倒换行符为止,然后存到一个string对象中去(注意不存换行符)

    getline函数的参数是一个输入流和一个string对象

        string line;

        while (getline(cin,line);

            cout <<line<<endl;//因为不存换行符

4、标准库类型 vector(容器)

    表示对象的集合,其中所有的对象的类型都相同,每个对象都有一个用于访问的索引。vector也称为容器。同样使用方法:    #include <vector>  

           using std::vector;

    vector是一个类模板,本身不是类或者函数,可看作为编译器生成类或者函数编写的一份说明,编译器根据模板创建类或函数的过程称为实例化,当使用模板时,要指出编译器要把类或函数实例化为何种类型。

    vector<T>  v1;//v1容器保存T类型的元素,空的vector对象。

    vector<T>  v1(v2);//把v2的元素拷贝给v1;或者写成v1=v2

    vector<string> v1={“a”,"an","the"};//列表初始化

    vector<int> v1(10);//v1有10个元素,且每个值都是0;若把int换成string,就代表10个都是空的string对象

    vector<int> v1(10,1);//10个元素都是1;若把()换成{},则表示只有两个元素,10和1;

     v1.push_back(x);//将x添加到v1的末尾;注意,vector对象不能通过下标形式添加元素。但可以对已知存在的元素进行下标操作(如访问),不存在的不能访问会报溢出错误。

5、迭代器iterator

    所有标准库容器都可以使用迭代器,可访问容器中的元素或者string对象中的字符;

auto类型说明符,c++11新标准,能让编译器替我们去分析表达式所属的类型,auto定义的变量必须有初始值(int、double的意思)自动的分析定义的变量应该是什么类型,根据初始值来决定。

    迭代器可以和指针一样理解;和指针不同的是,获取迭代器不是使用取地址符,begin和end都是返回的迭代器

    和指针类似,能通过解引用迭代器来获取它所指示的元素/对象,即(*迭代器)

c++ 字符串、向量和数组 2018.3.30

6、数组

    与vector相同的是:也是存放类型相同对象的容器,这类对象本身没有名字,需要通过其所在位置访问

    与vector不同的是:数组的大小确定不变,不能随意向数组中添加元素

    所以如果不清楚元素的确切个数,请使用vector

    数组不允许拷贝和赋值给其他数组

    数组的名字就是指向数组首元素的指针

        int ia[] = {0,2,4,6,8};

        int last = *(ia+4);//last=8

    数组中的标准库函数begin和end用法不同于迭代器,而是将数组作为他的参数:

        int *beg = begin(arr);//指向arr首元素的指针

    对数组使用下标运算符时,体会指针操作:

        c++ 字符串、向量和数组 2018.3.30

7、多维数组

    size_z  

    size_type