4.4 使用算法
STL定义了一组算法。这些算法可以通过迭代器来操作容器中的元素。STL实现了用于完成一些常见任务的算法,如查找、乱序和排序。这些算法是内置的灵活而高效的工具。使用它们可以将操作容器中元素的普通任务交给STL完成,从而将精力集中在游戏的编写上。这些算法的强大之处在于它们是泛型的,即同样的算法可以用于不同容器类型的元素。
4.4.1 High Scores程序简介
High Scores程序创建了一个存储高分的向量,还使用STL算法对分数进行查找、乱序和排序操作。程序如图4-5所示。
|
| 图4-5 STL算法对高分向量中的元素进行查找、乱序和排序操作 |
从Course Technology网站(www.courseptr.com/downloads)或本书合作网站(http://www. tupwk.com.cn/downpage)上可以下载该程序的代码。程序位于Chapter 4文件夹中,文件名为high_scores.cpp。
- // High Scores
- // Demonstrates algorithms
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <ctime>
- #include <cstdlib>
- using namespace std;
- int main()
- {
- 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 << "\nHigh Scores:\n";
- for (iter = scores.begin(); iter != scores.end(); ++iter)
- {
- cout << *iter << endl;
- }
- cout << "\nFinding a score.";
- int score;
- cout << "\nEnter a score to find: ";
- cin >> score;
- iter = find(scores.begin(), scores.end(), score);
- if (iter != scores.end())
- {
- cout << "Score found.\n";
- }
- else
- {
- cout << "Score not found.\n";
- }
- cout << "\nRandomizing scores.";
- srand(static_cast<unsigned int>(time(0)));
- random_shuffle(scores.begin(), scores.end());
- cout << "\nHigh Scores:\n";
- for (iter = scores.begin(); iter != scores.end(); ++iter)
- {
- cout << *iter << endl;
- }
- cout << "\nSorting scores.";
- sort(scores.begin(), scores.end());
- cout << "\nHigh Scores:\n";
- for (iter = scores.begin(); iter != scores.end(); ++iter)
- {
- cout << *iter << endl;
- }
- return 0;
- }