青春由磨砺而出彩,人生因奋斗而升华——嵌入式22081班结业啦! 时间:2023-03-02      来源:华清远见

从去年夏天

 

到今年春天

 

不知不觉大家相处了这么久

 

在这个结业的时光里

 

充满着伤感与离别

 

以及对未来的憧憬

 

希望在嵌入式道路上愈走愈远

 

一.项目答辩

 

 

在正式结业之前

 

大家要对自己这段时间的学习

 

进行一次综合性的检测

 

小组四到五人一起

 

做出一个综合性的项目

 

并成功演示

 

 

 

 

大家对待这次答辩十分认真

 

相信他们一定可以做出

 

令老师、令自己

 

满意的项目

 

二.结业证书

 

毕业典礼

 

当然要拿到结业证

 

才算真正的结束啦

 

望大家在今后的日子里

 

不忘曾经在华清

 

努力奋斗的自己

 

 

三.学习笔记分享

 

vector迭代器的失效与解决方法

 

向上滑动阅览

 

原因1:vector扩容引起迭代器失效

 

扩容操作可能引起迭代器失效,因为vector扩容是分配一个新的数组,然后全部元素移到新的数组中。

 

以下示例便会引起迭代器失效:

void test_1()

 

{

 

vectorvec;

 

vec.push_back(0);

 

vec.push_back(1);

 

vec.push_back(2);

 

vec.push_back(3);

 

vec.push_back(4);

 

cout << vec.size() << ":" << vec.capacity() << endl;

 

vector::iterator it = vec.begin();

 

while (it != vec.end())

 

{

 

if (*it % 2 == 0)

 

{

 

vec.insert(it, 5);

 

++it;

 

}

 

++it;

 

}

 

cout << vec.size() << ":" << vec.capacity() << endl;

 

for (auto e : vec)

 

{

 

cout << e << " ";

 

}

 

cout << endl;

 

}

 

原因:insert之后vector会分配新的空间,旧迭代器便会失效。

 

解决办法:取insert函数的返回值为新的迭代器。

 

原因2:迭代器指向的位置的意义改变

 

比如,在调用删除函数erase后可能出现迭代器失效。

 

示例:

 

void test_2()

 

{

 

std::vectorvec;

 

vec.push_back(0);

 

vec.push_back(1);

 

vec.push_back(2);

 

vec.push_back(3);

 

vec.push_back(4);

 

auto it = vec.begin();

 

while (it != vec.end())

 

{

 

if (*it % 2 == 0)

 

{

 

vec.erase(it);

 

}

 

else

 

{

 

++it;

 

}

 

}

 

for (auto e : vec)

 

{

 

cout << e << " ";

 

}

 

cout << endl;

 

}

 

原因:erase之后pos位置之后的元素会往前移动,如果pos位置是最后一个元素,则删除后pos为end的位置,而end的位置没有有效元素的,所以pos失效。因此有些编译器会禁止这类操作而报错,最好不要再直接操作erase后的迭代器。

 

解决办法:取erase函数的返回值为新的迭代器。

 

 

我们结业啦!

 

 

祝愿大家未来可期,不负韶华

 

保持热爱,奔赴山海


上一篇:青春正飞扬,努力正当时——记嵌入式23011班开班典礼

下一篇:春招在即,你准备好了吗?我在华清专场招聘会等你!

戳我查看嵌入式每月就业风云榜

点我了解华清远见高校学霸学习秘籍

猜你关心企业是如何评价华清学员的

干货分享
相关新闻
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2024 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部