比较元素,而不将它们存储在vector、数组、列表等中
Comparing elements without storing them in a vector, array, list, etc
好了,我在编程中一直纠结于此,现在,我要开始一个非常困难的编程作业,这是假设是作业中比较容易的部分之一…但基本上,这是我应该做的(我将复制并粘贴提示符,然后写下它的含义,只是为了澄清):
你的第一个任务是为一个累加器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;
- 在c++中用vector填充一个简单的动态数组
- std::vector的包装器,使数组的结构看起来像结构的数组
- 将 int 数组转换为 std::vector<int*>
- 为什么std::vector比数组慢
- C++ 无法将 std::vector<BYTE> 转换为字符串或字符数组
- 如何将数组的内容附加到 std::vector?
- 在 C++ 中使用 Vector 在动态数组中插入值,循环
- 为什么优化大型 std::vector 数组会导致 SegFault?
- SFML访问std::vector内的数组
- 如何在C++中将 std::vector 移动到原始数组中
- 如何使 std::vector<T> 使用现有的 T* 数组而不复制这些值?
- 将 unique_ptr<std::vector> 与 c 样式数组结合使用
- 将 2D 数组插入 std::vector 时"cannot convert from 'const GLfloat [12]' to '_Objty'"错误消息
- 查找索引数据结构,例如`sTD :: vector`(非数组)
- 如何在多个文件中声明全局 std::vector 2d 数组?C++
- 删除[]是否可以与通用数组正常使用?如果是这样,为什么使用std :: vector ::擦除它会导致释放内存的错误
- 使用 ::std::vector 创建数组
- 分配std::vector数组会减慢后续计算的速度
- std::vector数组的大小
- 在c++中使用Vector数组中的Vector