使用算法
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