C++模板类显示意外结果
C++ template class shows unexpected result
我定义了一个实现队列的模板类。
我插入的int值为:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
当在屏幕队列中显示内容时,我得到的值是:
0 1 2 3 4 5 6 7 10 11 12 13 14 15 16。
我不明白为什么会有这种区别。你能帮我吗?
//队列.h文件
template <class T> class Queue
{
private:
int numElements;
T* chain;
int limit;
public:
// Constructor
Queue (int);
void PutElement(T);
T GetElement();
void Print();
};
// Class Constructor.
template <class T> Queue<T>::Queue (int pNumElements)
{
numElements = pNumElements;
chain = new T[numElements];
limit = 0;
};
// Member functions.
template <class T> void Queue<T>::PutElement (T pElement)
{
if (limit < numElements)
chain[limit++] = pElement;
else
cout << "ERROR WHEN TRY TO INSERT A NEW ELEMENT: Queue is full.n";
};
template <class T> T Queue<T>::GetElement()
{
T tempElement;
if (limit == 0)
{
cout << "ERROR: Queue is emptyn";
return NULL;
}
tempElement = chain[0];
if (limit >= 2)
for (int pos=1; pos < limit; pos++)
chain[pos-1] = chain[pos];
limit--;
return tempElement;
};
template <class T> void Queue<T>::Print()
{
cout << "QUEUE CONTENTS: ";
for (int pos=0; pos<limit; pos++)
if (pos < limit-1)
cout << chain[pos] << ", ";
else
cout << chain[pos] << endl;
};
// main.cpp file:
#include <iostream.h>
#include "Queue.h"
void main()
{
cout << "nint values QUEUEn";
Queue <int> q1(15); // Max number of elements in queue is 15.
for (int aux=0; aux<17;aux++)
q1.PutElement(aux);
q1.Print();
for (aux=1; aux<20;aux++)
cout << "Queue element number " << aux << " is : " << q1.GetElement() << endl;
}"
// Screen result:
int values QUEUE
ERROR WHEN TRY TO INSERT A NEW ELEMENT: Queue is full.
ERROR WHEN TRY TO INSERT A NEW ELEMENT: Queue is full.
QUEUE CONTENTS: 0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16
Queue element number 1 is : 0
Queue element number 2 is : 1
Queue element number 3 is : 2
Queue element number 4 is : 3
Queue element number 5 is : 4
Queue element number 6 is : 5
Queue element number 7 is : 6
Queue element number 10 is : 7
Queue element number 11 is : 10
Queue element number 12 is : 11
Queue element number 13 is : 12
Queue element number 14 is : 13
Queue element number 15 is : 14
Queue element number 16 is : 15
Queue element number 17 is : 16
ERROR: Queue is empty
Queue element number 20 is : 0
ERROR: Queue is empty
Queue element number 21 is : 0
ERROR: Queue is empty
Queue element number 22 is : 0
ERROR: Queue is empty
Queue element number 23 is : 0"
也许我对您试图做的事情感到困惑,但您没有插入值为0到14的int。在你的主要功能中,你说就在那里
for (int aux=0; aux<17;aux++)
q1.PutElement(aux);
这是输入值为0到16的整数…正如您的输出所示。
相关文章:
- 尝试将字符串/字符转换为整数会产生意外结果
- RapidXML - 代码创建意外结果
- 类中静态函数C++意外结果
- 指针数组中的意外结果
- 使用指针访问数组元素时出现意外结果
- 使用 sprintf 和 %g 将双精度转换为字符串的意外结果
- C++:比较运算符>和字符串文本的意外结果
- 具有意外结果的 C++ 闭包
- yaml-cpp 比较的意外结果
- 每次都出现意外结果
- 在 Qt 中解析嵌套的 JSON 时出现意外结果(数组不存在)
- 如何避免 std::abs 的意外结果?
- 使用嵌套 if 语句的意外结果
- A ^= B ^= A ^= B;C# Visual Studio 中的意外结果
- 逻辑错误,我将获得意外结果
- 在 c++ 中使用异步的意外结果
- 从函数的返回值将元素C++存储到 std::vector 中时出现意外结果
- 执行递增和递减时"cout"链接会产生意外结果
- OpenCL - 内核方法返回意外结果
- C++使用 std::get_time 解析 YYMMDD ISO 8601 日期字符串会得到意外结果