vector

举报
无敌清风蓝 发表于 2023/08/31 21:53:32 2023/08/31
【摘要】 vector

1.vector

vector vjihe3; //语法错误,因为vector不能用来装引用,引用只是一个别名而不是对象

vector<int> a{ 1,2,3,4,5 };
    for (auto& aaa : a)
    {
        aaa = 2;
    }
    for (auto& aaa : a)
        cout << aaa << endl;

注意不要在for循环内改变vector的容量,增加删除元素都是不可以

2.迭代器

迭代器可以理解成用来指向容器中的某个元素的,有点像指针

vector iv = {100, 200, 300}; //定义一个容器

vector::iterator iter; //定义迭代器,也必须是vector开头

iterator是什么,它是每个容器(如vector)里面都定义了的一个成员(类型名),这个名字是固定的,请记住

每一种容器,如vector,都绑定了一个叫做begin的成员函数和一个叫end的成员函数

这两个成员函数用来返回迭代器的类型

iter = iv.begin();

iter = iv.end();//end返回的迭代器指向的并不是最后一个元素,而是末端元素的后面,这个后面怎么理解呢,就是end()指向的是一个不存在的元素

end起到了一个岗哨的作用,当从begin开始走,当begin走到end的位置时候,说明遍历完所有元素了

3.反向迭代器,rbegin,rend

迭代器中的iter++和++iter是同样的功能,让迭代器指向容器中的下一个元素,但是如果已经指向了end,就不能再++了,否则运行报错

–iter和iter–是一样的道理

struct student
{
    int num;
};
vector<student> sv;
student mystu;
mystu.num = 100;
sv.push_back(mystu);//把对象mystu复制给了sv容器中
mystu.num = 200;
vector<student>iterator iter;
iter = sv.begin();
cout<<(*iter).num << endl; //100,注意引用方法,*iter是一个结构变量,所以用“.”成员来引用成员
cout <<iter->num <<endl;//100,iter想成一个指针,所以用->引用成员

每个容器除了iterator这种迭代器类型,还有另一种迭代器类型叫做const_iterator,这里不能改的意思是,迭代器指向的元素不能改变,而不是迭代器不能变,迭代器还是可以不断指向容器中其他元素的,所以只能读元素,不能改元素,有点像常量指针,而iterator可以读也可以写

如果容器对象是一个常量,那么就必须用const_iterator否则报错

cbegin,cend成员函数,返回的是都是常量迭代器const_iterator;

vector<int> iv = { 1,2,3,4,5 };
    vector<int>::const_iterator it;
    for (it = iv.cbegin(); it != iv.cend(); ++it)
    {
        *it = 888; //错误,不能给常量赋值,这说明cbegin返回的是常量迭代器
        cout << *it << endl;
    }

4.迭代器失效

如果在for循环里面插入元素到容器的话,那就必须跳出循环体,不能再继续用这些迭代器操作容器

for (auto beg = iv.begin(), end = iv.end(); beg != end; ++beg)
{
    iv.push_back(88);
    break; //立刻跳出循环,这里的beg,end都不能再使用,以免出问题,后续重新用循环重新拿begin和end使用
}
//重新定位迭代器
for (auto beg = iv.begin(), end = iv.end(); beg != end; ++beg)
{
    //....
}
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。