美文网首页
C++ 11组合模式代码

C++ 11组合模式代码

作者: FredricZhu | 来源:发表于2021-07-06 11:42 被阅读0次

    题目,


    image.png

    其实这个实现不是特别好,应该把ManyValues做成组合vector<int>应该会好点。

    因为vector<T>类的析构函数不是虚函数,这样的话如果 ManyValues
    里面有堆对象需要释放的话,可能会造成内存泄漏。

    但是题干这样给的,不是特别好改。

    代码,
    头文件

    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;
    
    using int_it = vector<int>::iterator;
    
    struct ContainsIntegers {
        virtual int_it begin() = 0;
        virtual int_it end() = 0;
    };
    
    struct SingleValue: ContainsIntegers
    {
      int value{ 0 };
    
      SingleValue() = default;
    
      explicit SingleValue(const int value)
        : value{value}
      {
      }
      
      int_it begin() override {
          return int_it(&value);
      }
      
      int_it end() override {
          return int_it(&value + 1);
      }
    };
    
    struct ManyValues : vector<int>,  ContainsIntegers
    {
      void add(const int value)
      {
        push_back(value);
      }
      
      int_it begin() override {
          return ManyValues::vector<int>::begin();
      }
      
      int_it end() override {
           return ManyValues::vector<int>::end();
      }
    };
    
    int sum(const vector<ContainsIntegers*> items);
    

    cpp 文件,

    #include "exercise.h"
    
    int sum(const vector<ContainsIntegers*> items)
    {
        int res {0};
        for(auto&& c: items) {
            for(auto&& i: *c) {
                res += i;
            }
        }
        return res;
    }
    

    相关文章

      网友评论

          本文标题:C++ 11组合模式代码

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