比较元素,而不将它们存储在vector、数组、列表等中

Comparing elements without storing them in a vector, array, list, etc

本文关键字:vector 数组 列表 存储 元素 比较      更新时间:2023-10-16

好了,我在编程中一直纠结于此,现在,我要开始一个非常困难的编程作业,这是假设是作业中比较容易的部分之一…但基本上,这是我应该做的(我将复制并粘贴提示符,然后写下它的含义,只是为了澄清):

你的第一个任务是为一个累加器InOrder编写一个模板通过.put(item)方法接受一个项目序列,并通过.get()方法返回true或false,以指示该序列是否有序。

对你们中的一些人来说可能并不难,但基本上我要做的是为这个类写头代码,然后使用这个方法:

// The put method of anAccumulator has been applied
// to all values accessed by interators begin up to end.
template<typename A, typename I>
void
apply(A & anAccumulator, I begin, I end)
{
    for (I iter = begin; iter != end; ++iter)
    {
        anAccumulator.put( *iter);
    }
}

,这是我目前得到的tinorder。h头文件:

// Declares the class for InOrder.
#include <algorithm>
#include <vector>
#ifndef __INORDER_H_
#define __INORDER_H_
template <typename T>
class InOrder
{
public:
    InOrder() : _count(0)
    {};
    void put(T item)
    {
        data = item;
        while (item < data)
        {
            yOrder = true;
        }
    }
    bool get()
    {
        if (yOrder == true)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
private:
    bool yOrder;
    bool _count;
    T data;
};
#endif

显然,我不知道我在做什么。但是,根据我的理解,我应该以某种方式使用.put()和.get()方法,而不使用列表、向量、堆栈或队列。这是我的助教给我写的一封电子邮件,我认为他比我解释得更好:

我希望这对你有帮助。从您的电子邮件中的说明来看,您的类似乎不需要从命令行获取其输入。您只需要定义.put()方法。(也就是说,你的类不关心输入来自哪里。现在,由于您的类一次只获得一个输入,我确信您将能够弄清楚如何判断到目前为止看到的序列是否按顺序排列,您甚至不需要存储到目前为止看到的所有值。不要使用vector、list或任何其他容器。

所以我真正的问题是:如何使用。put()方法来测试用户输入是否有序?我真的很难弄清楚这一切,我希望有人能帮助我理解背后的逻辑。我知道这应该包括比较和重写,但仅此而已。举个例子就好了。非常感谢,谢谢!

你只需要保持旧的值,并与新项目进行比较。

假设T是默认可构造和可复制的:

template <typename T>
class InOrder
{
public:
    InOrder() : inOrder(true), initialized(false), oldValue() {}
    void put(const T& item)
    {
        if (initialized && item < oldValue) {
            inOrder = false;
        }
        oldValue = item;
        initialized = true;
    }
    bool get() const { return inOrder; }
private:
    bool inOrder;
    bool initialized;
    T oldValue;
};

boost::optional<T>可以代替bool initialized; T oldValue;