2013-07-23工作记录

使用算法
STL定义了一组算法。这些算法可以通过迭代器来操作容器中的元素。STL实现了用
于完成一些常见任务的算法,如查找、乱序和排序。这些算法是内置的灵活而高效的工具。
使用它们可以将操作容器中元素的普通任务交给STL完成,从而将精力集中在游戏的编写
上。这些算法的强大之处在于它们是泛型的,即同样的算法可以用于不同容器类型的元素。

1.使用算法的准备工作
为了使用STL算法,我们将含有算法定义的头文件包含进来。
#include <algorithm>

2.使用find()算法

在显示向量scores的内容后,程序从用户获取要查找的值,并存储在变量score中。然
后,程序使用find()算法在scores向量中查找该值:

vector<int>::const_iterator iter;

   cout<<"Creating a list of scores.";
   vector<int> scores;
   scores.push_back(1500);
   scores.push_back(3500);
   scores.push_back(7500);

   cout<<" High Scores: ";
   for (iter=scores.begin(); iter!=scores.end(); iter++) {
       cout<<*iter<<endl;
   }

   cout<<"Finding a score.";
   int score;
   cout<<"Entering a score to find.";
   cin>>score;

   iter=find(scores.begin(),scores.end(),score);

iter = find(scores.begin(), scores.end(), score);

STL的find()算法在指定范围内的容器元素中查找值,它返回引用第一个匹配元素的一
个迭代器。如果没有找到匹配的元素,则返回的迭代器指向指定范围的结尾处。必须给find()
传递一个起点迭代器、一个终点迭代器和要查找的值。该算法从起点迭代器开始查找,一
直查找到但不包括终点迭代器。

接下来,程序检查值score是否找到:
if (iter != scores.end()) {
cout << "Score found. ";
} else {
cout << "Score not found. ";
}
请记住,如果找到score的值,iter 将引用向量中第一次出现score的元素。因此,只
要iter不等于scores.end(),就说明查找成功。随后程序显示消息表示查找成功。否则,iter
将等于scores.end(),说明查找失败。

3.使用random_shuffle()算法

srand(static_cast<unsigned int>(time(0))); //为随机数生成器确定种子

random_shuffle(scores.begin(), scores.end());//程序随机地对分数进行重新排序

//random_shuffle()算法将序列中的元素进行乱序。该算法需要序列的起点迭代器和终点
迭代器来进行乱序操作

PS:尽管或许不需要对某个高分列表进行乱序操作,但对于游戏而言,random_shuffle()依
然是个很有价值的算法。它可以用来洗牌,也可以打乱玩家在游戏的某一关中遭遇敌
人的顺序。

4.使用sort()算法

sort(scores.begin(), scores.end());

sort()算法对序列中的元素进行升序排列。该算法需要序列的起点迭代器和终点迭代器来进行排序操作。

ps:STL算法的一个绝妙的特性在于,它们可以用于定义在STL之外的容器,只要这些容
器满足特定要求即可。

理解向量的性能

http://www.mindmap.com.cn/ yesunsong yss123

原文地址:https://www.cnblogs.com/yssgyw/p/3208097.html