科技行者

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

知识库

知识库 安全导航

至顶网软件频道基础软件标准模板库(STL)学习指南之List容器

标准模板库(STL)学习指南之List容器

  • 扫一扫
    分享文章到微信

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

STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件

作者:OURY 来源:blog 2007年10月19日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
使用count_if()的一个更加复杂的函数对象

  我们可以更进一步的研究一下函数对象。假设我们需要传递更多的信息给一个函数对象。我们不能通过 调用operator来作到这点,因为必须定义为一个list的中的对象的类型。 然而我们通过为IsAToothbrush指出一个非缺省的构造函数就可以用任何我们所需要的信息来初始化它了。 例如,我们可能需要每个牙刷有一个不定的代码。我们可以把这个信息加到下面的函数对象中:

/*
|| Using a more complex function object
*/
#include <iostream.h>
#include <string>
#include <list>
#include <algorithm>

class IsAToothbrush
{
 public:
  IsAToothbrush(string& InToothbrushCode) :
  ToothbrushCode(InToothbrushCode) {}
  bool operator() (string& SalesRecord)
  {
   return SalesRecord.substr(0,4)==ToothbrushCode;
  }
 private:
  string ToothbrushCode;
};

int main (void)
{
 list<string> SalesRecords;

 SalesRecords.push_back("0001 Soap");
 SalesRecords.push_back("0002 Shampoo");
 SalesRecords.push_back("0003 Toothbrush");
 SalesRecords.push_back("0004 Toothpaste");
 SalesRecords.push_back("0003 Toothbrush");

 string VariableToothbrushCode("0003");

 int NumberOfToothbrushes(0);
 count_if (SalesRecords.begin(), SalesRecords.end(),
 IsAToothbrush(VariableToothbrushCode),
 NumberOfToothbrushes);
 cout << "There were "
 << NumberOfToothbrushes
 << " toothbrushes matching code "
 << VariableToothbrushCode
 << " sold"
 << endl;
}

  程序的输出是:

  There were 2 toothbrushes matching code 0003 sold 这个例子演示了如何向函数对象传递信息。你可以定义任意你想要的构造函数,你可以再函数对象中做任何你 想做的处理,都可以合法编译通过。

  你可以看到函数对象真的扩展了基本记数算法。

  到现在为止,我们都学习了:

   ·定义一个list

   ·向list中加入元素

   ·如何知道list是否为空

   ·如何使用for循环来遍历一个list

   ·如何使用STL的通用算法for_each来遍历list

   ·list成员函数begin() 和 end() 以及它们的意义

   ·iterator范围的概念和一个范围的最后一个位置实际上并不被处理这一事实

   ·如何使用STL通用算法count()和count_if()来对一个list中的对象记数

   ·如何定义一个函数对象

  我选用这些例子来演示list的一般操作。如果你懂了这些基本原理,你就可以毫无疑问的使用STL了 建议你作一些练习。我们现在用一些更加复杂的操作来扩展我们的知识,包括list成员函数和STL通用算法。

查看本文来源

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

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

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