科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件STL实践指南之算法

STL实践指南之算法

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

算法是模板中使用的函数。这才真正开始体现STL的强大之处。

作者:Jeff Bogan 来源:vchelp 2007年10月19日

关键字: STL 实践指南 算法

  • 评论
  • 分享微博
  • 分享邮件
算法是模板中使用的函数。这才真正开始体现STL的强大之处。你可以学习一些大多数模板容器中都会用到的一些算法函数,这样你可以通过最简便的方式进行排序、查找、交换等操作。STL中包含着一系列实现算法的函数。比如:sort(vec.begin()+1, vec.end()-1)可以实现对除第一个和最后一个元素的其他元素的排序操作。



  容器自身不能使用算法,但两个容器中的游标可以限定容器中使用算法的元素。既然这样,算法不直接受到容器的限制,而是通过采用游标,算法才能够得到支持。此外,很多次你会遇到传递一个已经准备好了的函数(以前提到的声明:predicate)作为参数,你也可以传递以前的旧值。

  下面的例子演示了怎样使用算法:

//程序:测试分数统计
//目的:通过对向量中保存的分数的操作说明怎样使用算法

#include <algorithm> //如果要使用算法函数,你必须要包含这个头文件。
#include <numeric> // 包含accumulate(求和)函数的头文件
#include <vector>
#include <iostream>
using namespace std;

int testscore[] = {67, 56, 24, 78, 99, 87, 56};

//判断一个成绩是否通过了考试
bool passed_test(int n)
{
 return (n >= 60);
}

// 判断一个成绩是否不及格
bool failed_test(int n)
{
 return (n < 60);
}

int main(int argc, char* argv[])
{
 int total;
 // 初始化向量,使之能够装入testscore数组中的元素
 vector <int> vecTestScore(testscore,
 testscore + sizeof(testscore) / sizeof(int));
 vector <int>::iterator vi;

 // 排序并显示向量中的数据
 sort(vecTestScore.begin(), vecTestScore.end());
 cout << "Sorted Test Scores:" << endl;
 for (vi=vecTestScore.begin(); vi != vecTestScore.end(); vi++)
 {
  cout << *vi << ", ";
 }
 cout << endl;

 // 显示统计信息

 // min_element 返回一个 _iterator_ 类型的对象,该对象指向值最小的那个元素。
 //“*”运算符提取元素中的值。
 vi = min_element(vecTestScore.begin(), vecTestScore.end());
 cout << "The lowest score was " << *vi << "." << endl;

 //与min_element类似,max_element是选出最大值。
 vi = max_element(vecTestScore.begin(), vecTestScore.end());
 cout << "The highest score was " << *vi << "." << endl;

 // 使用声明函数(predicate function,指vecTestScore.begin()和vecTestScore.end())来确定通过考试的人数。
 cout << count_if(vecTestScore.begin(), vecTestScore.end(), passed_test) <<
" out of " << vecTestScore.size() << " students passed the test" << endl;

 // 确定有多少人考试挂了
 cout << count_if(vecTestScore.begin(),
 vecTestScore.end(), failed_test) <<" out of " << vecTestScore.size() << " students failed the test" << endl;

 //计算成绩总和
 total = accumulate(vecTestScore.begin(),
 vecTestScore.end(), 0);
 // 计算显示平均成绩
 cout << "Average score was " <<(total / (int)(vecTestScore.size())) << endl;

 return 0;
}

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章