• 命名空间 algorithm头文件 reverse迭代器的erase<<0925


    0925 词频统计程序的一些总结

    命令空间

    1. 将命名空间里面的函数声明和定义分开,头文件里面只需要包含声明就好了,另外写一个.cc文件,书写函数的定义

       //fun.h
       #ifndef TEST_H_
       #define TEST_H_
      
       namespace HW
       {
       void fun(void);
       }
      
       #endif
      
       //fun.cpp
       #include"fun.h"
      
       void HW::fun(void)
       {
         //do nothing
       }
       
       //main
       #include<iostream>
       #include"fun.h"//只用包含头文件就OK
       int main(int argc, char **argv)
       {
        HW::fun();
        //或者
        //using namespace HW;
        //fun();
        
       return EXIT_SUCCESS;
       }
      
    2. 有关命名空间的详细资料可查询文章系列

    统计词频程序值得借鉴的地方

    1. 在WordFrequency类里面设置filename_和stoplist_,使用带两个参数的构造函数初始化之,然后就可以将readstoplist(),readwordfile()放入类中,进而操作unordered_map和unordered_set.
    2. 在构建好了unordered_map后,再利用一个vector,压入map中的元素,将其中的元素使用sort进行排序(自己构建一个bool comp函数,可以放在新建的命名空间里)
    3. 使用set的count(word)函数来判断存在性
    4. 使用了copy(words_.begin(),words_.end(),back_inserter(sortWords_));函数来将map中的元素采用插入至最后一个元素的方式copy至vector中,注意back_inserter()函数意义为push_back,所以肯定还存在一个front_inserter()函数,相当于push_front
    5. typedef XX XX 既可以放在private,也可以放在public

    有关reverse迭代器

    1. 在逻辑上,rbegin指向最后一个元素,rend指向第一个元素的前一个位置。
    2. 但是在实际实现上,rbegin指向最后一个元素的下一个位置,rend指向第一个元素。
    3. reverse迭代器的物理位置与逻辑位置差1
    • 采用这种实现的好处是:将iterator转化成reverse_iterator之后的区间,与之间的区间恰好相反,但内容相同。例如[2, 7),用reverse表达是[6, 1)内,可以参照0925/iterator/2.cc

    • reverse迭代器不能用于erase函数。删除的正确方式是:it = string::reverse_iterator(s.erase((++it).base()));

    STL中重要的algorithm头文件

    该头文件里面包含的函数参见http://zhouyuanyuan.hi.blog.163.com/blog/static/131455102201312145530757/

    1. *max_element,min_element函数找最大最小元素
      使用方法:min = *std::min_element(vec.begin(), vec.end()),若元素间大小标准可以取多个,也可以添加第三个参数,基返回bool类型的comp函数指针,

      bool comp(const string &s1, const string &s2)
      {
       	return s1.size() < s2.size();//这里return是小于号的时候,max输出最大值,min输出最小值
      }
      

    max_element(vec.begin(), vec.end(), comp);

    1. for_each函数对容器里面的每一个元素进行操作
      for_each(vec.begin(), vec.end(), toUpper),第三个元素为一个函数指针,指向的函数具有一个隐式参数:容器里面的元素(不是迭代器)

    2. find 和 find_if查找
      std::find(vec.begin(), vec.end(), "dalian");返回迭代器
      std::find_if(vec.begin(), vec.end(), isShorter);其中第三个参数为一个返回bool类型的函数指针,返回的也是迭代器:

      bool isShorter(const string &s)
      {
      return s.size() < 6;
      }
      
    3. copy(),参见上面;

    4. lambada表达式:for_each(vec.begin(), vec.end(), [](const string &s) { cout << s << " "; });

    5. count和conut_if
      int mycount = std::count (myvector.begin(), myvector.end(), 20)//返回第三个参数val出现的次数
      int mycount = count_if (myvector.begin(), myvector.end(), IsOdd);//返回满足第三个参数给出的条件的次数

  • 相关阅读:
    CrossApp alpha 0.1.10 发布,跨平台移动应用开发引擎
    CrossApp 0.1.8 发布,跨平台移动应用开发引擎
    CrossApp 0.1.6 发布,跨平台移动应用开发引擎
    【开源访谈】CrossApp作者栗元峰访谈实录
    CrossApp 0.1.5 发布,跨平台移动应用开发引擎
    java第一 ++--
    MySQL数据库
    JQ方法实用案例///鼠标移动到div和修改ipt中弹窗、CSS鼠标变小手、JQ获取元素属性、JQ选择器
    轮播图!!!!
    查找列表框、下拉菜单控件、对表格元素/表单控件进行增删改操作、创建元素并且复制节点与删除、 对表格操作、通用性和标准的事件监听方法(点击后弹窗效果以及去掉效果)
  • 原文地址:https://www.cnblogs.com/sunstars/p/3995866.html
Copyright © 2020-2023  润新知