vector初始化时的()[ ]区别,指针与迭代器的认识

    技术2022-07-11  86

    1、迭代器与指针的认识

    vector<int> s; vector<int>* p=&s;

    s是一个vector型的对象,它不是数组,但它重载了[ ],支持下标运算。p是指向这个对象的指针,p++,p[1]这种屁都不是,因为s就一个,s不是对象数组的名字。 这下知道为什么要有迭代器了吧,因为指向s的指针不可以移动,想在s元素上移动就得使用s内部的“指针”。所以封装了迭代器,来在s 上“移动”。 STL中很多算法都是通过迭代器来操作容器的,如果使用容器内元素的指针,一来破坏了封装性,二来是算法无法独立,因为指针的类型太多了

    (*p)[1];//是正确的,因为*p就是s

    2、vector的各种初始化方法

    vector<int> s(2);//是一个单个的对象,且size为2,每个元素都是0 vector<int> s(2,9);//是一个单个的对象,且size为2,每个元素都是9 vector<int> s[2];//s是对象数组,s[0]、s[1]都是空的容器。 vector<int> p(s);//产生一个容器p与s一样,注意s必须是容器 //即必须是vector<int>型,不能是vector<int>*型. vector<int> s({1,2,3,4,5})//直接把数组元素放在容器中 vector<int> s(arrayName,arrayName+n)//把数组前n个元素放在容器中(copy 也能完成这些事情) 好像不能在容器初始化的时候,把另一个容器的一部分复制过来,还是用copy吧
    Processed: 0.022, SQL: 9