美文网首页
C++11享元模式展示

C++11享元模式展示

作者: FredricZhu | 来源:发表于2021-07-08 13:45 被阅读0次
image.png

题干,看题干好像只要能支持指定位置的单词大写就行。
但其实出题者的单元测试不只这些,
大写之后也有可能还原到小写。
这样对于每个单词,注定只能取最后一次的词频状态。
这个比较适合用map。
使用C++的std::map时需要注意,如果要把 key value值放入std::pair里面,key value值都必须有默认构造函数,就是不带参数的构造函数。
否则会翻车。
本例的WordToken没有写构造函数,那么编译器默认实现了 默认构造,拷贝构造,拷贝赋值。是有默认构造函数的。
程序代码如下,

#include <vector>
#include <map>
#include <string>
#include <sstream>
#include <algorithm>
#include <iostream>
using namespace std;

struct Sentence
{

  struct WordToken
  {
    bool capitalize{false};
  };
   
  string text_;
  
  map<size_t,WordToken> tokens_;
  
  vector<string> substrs_;

  vector<string> get_sub_strs(const string& source, const string& delim) {
    string s {source};
    vector<string> res;
    size_t pos = 0;
    std::string token;
    while ((pos = s.find(delim)) != std::string::npos) {
        token = s.substr(0, pos);
        res.push_back(token);
        s.erase(0, pos + delim.length());
    }
    res.push_back(s);
    return res;
  }
  
  Sentence(const string& text): text_{text}, substrs_ {get_sub_strs(text_, " ")}
  {
  }

  WordToken& operator[](size_t index)
  {
      tokens_[index] = {false};
      return tokens_[index];
  }

  string str() const
  {
      ostringstream oss;
      for(size_t i=0; i<substrs_.size(); ++i) {
          
        string cur = substrs_[i];
        if(tokens_.find(i) != tokens_.end()) {
            auto token = tokens_.find(i);
            if(token->second.capitalize) {
                transform(cur.begin(), cur.end(), cur.begin(), ::toupper);
            } else {
                transform(cur.begin(), cur.end(), cur.begin(), ::tolower);   
            }
        }
          oss << cur << " ";
      }
      string res = oss.str();
      res = res.substr(0, res.size() - 1);
      return res;
  }
};

相关文章

  • C++11享元模式展示

    题干,看题干好像只要能支持指定位置的单词大写就行。但其实出题者的单元测试不只这些,大写之后也有可能还原到小写。这样...

  • 设计模式之享元模式(flyweight模式)

    引入享元模式 享元模式的实例 享元模式的分析 引入享元模式 flyweight是轻量级的意思,指的是拳击比赛中选手...

  • 第4章 结构型模式-享元模式

    一、享元模式的简介 二、享元模式的优缺点 三、享元模式的实例

  • 享元模式

    一、享元模式介绍 二、享元模式代码实例

  • 设计模式--享元模式

    目录 本文的结构如下: 引言 什么是享元模式 模式的结构 典型代码 代码示例 单纯享元模式和复合享元模式 模式扩展...

  • 享元模式C++

    享元模式,就是运用共享技术有效地支持大量细粒度的对象。 享元模式结构图 享元模式基本代码 应用场景 享元模式可以避...

  • 设计模式之——享元模式

    1 享元模式的定义 享元模式:使用共享对象可有效地支持大量细粒度的对象。享元模式是池技术的重要实现方式。享元模式的...

  • 好程序员Java培训​分享java设计模式之享元模式

    好程序员Java培训​分享java设计模式之享元模式,Java设计模式中的享元模式。享元模式有点类似于单例...

  • 结构型模式:享元模式

    文章首发:结构型模式:享元模式 七大结构型模式之六:享元模式。 简介 姓名 :享元模式 英文名 :Flyweigh...

  • Java设计模式(三)

    talk is cheap show me the code 享元模式 享元模式 责任链模式 责任链模式Filte...

网友评论

      本文标题:C++11享元模式展示

      本文链接:https://www.haomeiwen.com/subject/cfftpltx.html