我正在编写c++代码来使用指针数组实现Queue.内存分配不正确.有什么建议吗
I am writing c++ code to implement Queue using pointer array.Memory allocation is not happening correctly.Any suggestion?
这是我为使用指针数组的队列编写的代码。
#include <iostream>
#include <Queue>
using namespace std;
#define size 2
class Queue{
public:
int f;
int r;
int* arr;
public:
Queue(){
arr = new int [size];
int f, r = -1;
}
int isEmpty(){
if(r == -1 && f == -1){
cout<<"Queue underflow";
}
return 0;
}
int isFull(){
if(r == size - 1){
cout<<"Queue overflow";
}
return 0;
}
void enqueue(int val){
if( isFull()){
cout << "Cannot push element in Queue";
}
else{
arr[r] = val;
r++;
cout << "The value in Queue is" << " " << val << endl;
}
}
int dequeue(){
int a = -1;
if( isEmpty()){
cout << "Cannot pop element from Queue";
return 0;
}
else{
a = arr[f];
f++;
return a;
}
}
};
int main(){
Queue q;
q.f = q.r = 0;
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
cout << "Dequeuing element is" << q.dequeue() << endl;
cout << "Dequeuing element is" << q.dequeue() << endl;
cout << "Dequeuing element is" << q.dequeue() << endl;
cout << "Dequeuing element is" << q.dequeue() << endl;
if( q.isEmpty()){
cout << "Queue is empty";
}
return 0;
}
这是输出
The value in Queue is 1
Queue overflow The value in Queue is 2
The value in Queue is 3
Dequeuing element is1
Dequeuing element is2
Dequeuing element is3
Dequeuing element is563
虽然我在打印一个元素后仍将大小设置为2,但它会显示"队列溢出",然后在我将第四个元素出列时也打印数据(尽管没有第四个(,它会打印带有荒谬数字的行。
正如Nathan Pierson正确指出的,函数isFull
和isEmpty
总是返回0,这在if语句中被隐式转换为false,因此enqueue
和dequeue
中的检查不起作用,函数总是被执行。此外,我想指出其他几点:
- 请不要使用预处理器指令来定义大小变量,而是使用
constexpr
。(constexpr int size = 2;
(。您选择的名称(size(非常危险,大多数STL容器都有一个也称为size的方法。然后,预处理器指令将用2
替换函数调用,从而破坏编译 - Queue类中有两个成员变量:
r
和f
。它们是什么意思?你在方法isFull
和isEmpty
中检查它们,所以我想它们非常重要。请为变量使用描述性名称(例如使用正面和背面( - 方法
isFull
和isEmpty
返回int以指示true或false值。在C++中,有一种特殊的类型被设计用来指示真或假:bool
。请使用它而不是int
相关文章:
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 给定一个指向堆分配内存的指针,智能指针实现如何为其找到合适的释放函数?
- 如果 const 不分配内存,为什么我可以获取 const 的地址?
- 在函数中分配内存时出现问题
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- constexpr new 如何分配内存?
- 在构造函数中分配内存失败是如何冒泡的
- LLVM 传递以在特定地址分配内存
- CudaMalloc 在分配内存时失败
- 为什么它在不分配内存的情况下工作正常
- 为什么在正确解除分配内存时出现内存泄漏?
- 如何通过 malloc 为队列数组分配内存?
- vector是否为std::移动的对象连续分配内存
- 删除类成员的动态分配内存的最佳方法是什么
- 唯一指针是否在堆或堆栈上分配内存?
- 如果不分配内存,我如何能够为变量创建和分配值?
- std::initializer_list 堆是否分配内存?
- 如何按顺序或在指定的地址分配内存?
- 是否可以使用 malloc 为类对象分配内存?
- 迭代器是否分配内存(如指针)?