题目,
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;
}
网友评论