gpt4 book ai didi

c++ - 如何索引指向数组[队列]的指针数组?

转载 作者:行者123 更新时间:2023-11-28 01:25:11 27 4
gpt4 key购买 nike

我正在尝试用 C++ 中的数组编写一个队列。

我使用了这种方法 https://stackoverflow.com/a/936709/7104310如下所示。

我的问题:如何索引数组以填充它们?

例如,在普通的二维数组中,它将是 arr[3][2]。但我不知道如何用指针来做到这一点。解决方案中未回答该问题。

谢谢!

#include <iostream>

#define MAX_SIZE 3

using namespace std;


// ary[i][j] is then rewritten as

//arr[rear*capacity + front]

// Class for queue
class msg_queue
{
char **arr; // array to store queue elements
int capacity; // maximum capacity of the queue
int front; // front points to front element in the queue (if any)
int rear; // rear points to last element in the queue
int count; // current size of the queue

public:
msg_queue(int size = MAX_SIZE, int slot_length = MAX_SIZE); // constructor

void dequeue();
void enqueue(char x);
char peek();
int size();
bool isEmpty();
bool isFull();
};

// Constructor to initialize queue
msg_queue::msg_queue(int size, int slot_length)
{
arr = new char*[size];
for (int i = 0; i < size; ++i) {
arr[i] = new char[slot_length];
}

capacity = size;
front = 0;
rear = -1;
count = 0;
}

// Utility function to remove front element from the queue
void msg_queue::dequeue()
{
// check for queue underflow
if (isEmpty())
{
cout << "UnderFlow\nProgram Terminated\n";
exit(EXIT_FAILURE);
}

cout << "Removing " << arr[front] << '\n';

front = (front + 1) % capacity;
count--;
}

// Utility function to add an item to the queue
void msg_queue::enqueue(char item)
{
// check for queue overflow
if (isFull())
{
cout << "OverFlow\nProgram Terminated\n";
exit(EXIT_FAILURE);
}

cout << "Inserting " << item << '\n';

rear = (rear + 1) % capacity;
arr[rear] = item; //ERROR HERE
count++;
}

// Utility function to return front element in the queue
char msg_queue::peek()
{
if (isEmpty())
{
cout << "UnderFlow\nProgram Terminated\n";
exit(EXIT_FAILURE);
}
return arr[front]; //ERROR HERE
}

最佳答案

嗯,还是arr[3][2]

虽然数组不是指针,但我们使用它们的方式是有效地使用指针,因为它们的工作方式和它们的名称衰减的方式。

x[y] *(x+y),根据定义。

话虽这么说,我建议您放弃 2D 动态分配(这对您的缓存来说是毒药)并改为创建一大块 Width×Height char .您可以使用一些数学知识为该数据提供二维索引。

此外,您还忘记释放任何内存。如果你使用一个很好的 std::vector 来实现我建议的一维数据方案(或者即使你雇用了一个 vector 的 vector ,但是 ew!)那么它会为你销毁。当然,如果你能做到这一点,那么你可能会使用 std::queue...

关于c++ - 如何索引指向数组[队列]的指针数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54197830/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com