今日c++学习心得

理论课

本周学习了顺序容器的相关知识
顺序容器包括vector,deque,list,forward_list,arraystring
选择容器的基本原则

除⾮你有很好的理由选择其他容器,否则应使⽤vector。
如果你的程序有很多⼩的元素,且空间的额外开销很重要,则不要使⽤list或forward_list。
如果程序要求随机访问元素,应使⽤vector或deque。
如果程序要求在容器的中间插⼊或删除元素,应使⽤list或forward_list。
如果程序需要在头尾位置插⼊或删除元素,但不会在中间位置进⾏插⼊或删除操作,则使⽤deque。

迭代器范围是左闭右开的,即[begin,end)
除array外,容器的默认初始化都使之成为一个空容器
可以使用拷贝初始化和列表初始化,特别地,拷贝初始化还可以传入一对迭代器,初始化为指定范围内的拷贝
这种情况下,两个容器的类型未必是相同的,只要元素可以相互转换就可以了
与之类似,顺序容器还提供了assign操作,允许从一个不同但相容的容器赋值,但要注意传入的参数不能指向自身
例如常用的set去重方式

1
2
3
vector<int> vec={1,1,1,2,2,3};//vec是一个包含重复元素的vector
set<int>s(vec.begin(), vec.end());//将s初始化为vec,重复的元素自动被去除了
vec.assign(s.begin(), s.end());//再将s赋给vec,得到去重后的vector

容器的大小比较规则有些类似于string,注意类型完全相同才能比较
容器还提供了push_back,push_front,emplace_back,emplace_front,insert,pop_back,pop_front,erase等等操作
不同的容器有不同的函数可以使用,也对应着不同的开销,十分多样化,使用时可以常查查书
链表提供了特殊的insert_after,emplace_aftererase_after
注意,容器操作可能使迭代器失效!,因此我们要保证正确地更新迭代器
为了提高效率,vector会有一定的备用空间,因此它的size和capacity常常是不等的
容器适配器可以使我们模拟一些特殊的类型,通常是栈和队列,做题时比较常见

实践课

完成了三道编程题
第一题是统计上证指数连续变化的天数
第二题是处理时间的多种表达方式
第三题是实现一个基本计算器
挺有挑战性的