vector

简介: 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)
{
    //....
}
相关文章
|
2天前
|
数据采集 人工智能 安全
|
11天前
|
云安全 监控 安全
|
3天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1021 151
|
3天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1720 9
|
8天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
660 152
|
10天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
625 13