我正在处理一个项目,该项目要求我为Accumulator创建一个模板类,该模板类返回天气与否,传递给它的列表是有序的。订单递增。
我可能已经过度思考了这个问题,但我似乎无法弄清楚如何对原始数据类型和字符串进行大于/小于检查。我将澄清: 过程如下: 声明了一个列表/向量,并将东西存储在其中。 然后调用名为apply的辅助累加器。 此累加器(apply)遍历列表,在列表中的每个值上调用InOrder累加器的.put()方法。值可以是double,long,short等类型或字符串。
我尝试设置任意下限,将其设置为等于列表中的第一个元素,然后根据该起点进行检查,但这会产生混合结果,因为它不适用于字符串。
我正在考虑检查typeid或其他东西,以便对于字符串我可以调用.size()方法并比较那种方式。就原始而言,我只想使用>或者<运营商。但这会破坏模板功能的重点。任何帮助将不胜感激。
我发布代码的是调用函数,Apply Accumulator的代码和InOrder的代码。如果需要其他任何内容,请告诉我。
我的InOrder:
template<typename T>
class InOrder
{
public:
InOrder(){}
~InOrder(){}
void put(T item)
{
_count++;
if(_count == 1)
{
_lowbound = item;
}
if(_count!=0 && _count!=1 && item<_lowbound)
{
_order = false;
}
if(_count!=0 && _count!=1 && item>_lowbound)
{
_order = true;
}
_count++;
}
bool get()
{
return _order;
}
private:
T _lowbound;
int _count = 0;
bool _order;
};
申请累积器:
template<typename A, typename I>
void apply(A & anAccumulator, I begin, I end)
{
for (I iter = begin; iter != end; ++iter)
{
anAccumulator.put( *iter);
}
}
调用InOrder的代码:
{
// Read a list of doubles into a List and check their order
cout << "apply InOrder to a List of doubles\n";
double sentinel = -1.23;
List<double> dList;
fillList(sentinel, dList);
InOrder<double> dblInOrder;
apply(dblInOrder, begin(dList), end(dList));
cout << "The doubles in dList are ";
if (!dblInOrder.get())
cout << "NOT ";
cout << "in order\n\n";
}
{
// Read a list of strings into a List and check their order
cout << "apply InOrder to a List of strings\n";
string strSent = "end";
List<string> sList;
fillList(strSent, sList);
InOrder<string> strInOrder;
apply(strInOrder, begin(sList), end(sList));
cout << "The strings in sList are ";
if (!strInOrder.get())
cout << "NOT ";
cout << "in order\n\n";
}
我应该注意,放入列表的项目按相反的顺序处理 例如:如果我在[a,b,c]或[1,2,3]中键入我的列表,则要处理的第一个值/字符串将是c / 3,然后依次为b / 2和a, 1
答案 0 :(得分:0)
这不会起作用:
if(_count!=0 && _count!=1 && item<_lowbound)
{
_order = false;
}
因为应该是:
InOrder() : _order(true) {}
删除第二部分,然后添加:
_order = false; // here is you have to stop and skip all other items
给你的构造函数。
答案 1 :(得分:0)
你的错误是当你发现订单错误时你不会停止:
{{1}}