1.图的广度优先搜素
这两天在做全地图寻路,用到了图的最短路径算法,因为无权值,所以就是最简单的广度优先搜索,说是最简单,但对于我也不是不用动脑子就能写,我自己先根据记忆写了一个,然后再把《算法导论》找来,看了一下里面写的,结果果然我把比较妙的一部分没写出来。广度优先搜索形象得说,就是一个点被点亮,然后这个点周围一圈点被点亮,然后周围一圈点的每一个点的周围一圈点被点亮,如此下去,要解决的一个问题就是这里有两个层次,第一个层次是周围点需要被点亮的点,第二个层次是前一个层次的点周围的被点亮的点,每一轮动作结束后,第二个层次变为第一个层次,这两个层次都需要被记录,我一开始是用两个vector记录它们,每轮动作结束后,将第一层的vector清空,然后把第二层的vector复制到第一层,然后清空第二层。而《算法导论》里面是用一个队列实现的,第一层在队列的前部,第二层在队列的后部,第一层处理完毕后,就消失了,第二层就自动变为第一层了,这个比较妙。
2.C++中的从属类型
从属于模板类型参数的类型被称为从属类型,前面要加typename,例如:
template<typename C>
bool lastGreaterThanFirst(const C& coll)
{
typename C::const_iterator begin(coll.begin());
typename C::const_iterator end(coll.end());
return *--end > *begin;
}
3.关联容器元素依据键值由小到大输出
用语句copy (coll.begin(). coll.end(), ostream_iterator<int>(cout, " "));顺序输出容器中的元素,set、multiset、map、multimap是按照键值由小到大输出的,但hash_map和hash_set无法做到这一点。