我需要在C ++中使用队列的帮助。
我有一个iframe
,其中包含2个成员,以后我想删除它们:
struct
这是我的出队代码:
#define MAX 10
struct queue{
int head,tail;
string code[max], title[max];
} q;
比方说,我已经在队列中输入了3个项目:
if01 | c ++
if02 |红宝石
if03 | java
我要一一删除项目。因为它是一个队列,所以应该删除的第一个数据是数字1,对吧?
所以它最终应该像这样:
if02 |红宝石
if03 | java
但是不幸的是,它不能那样工作,我得到的输出是:
if02 | c ++
if03 |红宝石
然后,如果我尝试再次删除,则会得到如下输出:
我不知道为什么void delete(){
if(empty()){
cout<<"Queue is empty!";
}else{
int i;
for (i = 0; i < q.tail; i++)
q.code[i]=q.code[1+i];
q.title[i]=q.title[i+1];
q.tail--;
}
show_data();
}
不会像title
一样被删除。
如果我尝试反转循环,就像这样:
code
for (i = 0; i < q.tail; i++)
q.title[i]=q.title[i+1];
q.code[i]=q.code[1+i];
q.tail--;
不会删除,但是code
会正常删除。
答案 0 :(得分:0)
您的循环并没有同时绕过code
和title
成员。您只需要在循环内移动其中一个,然后在循环结束后 1次移动另一个。
您需要在循环主体中添加一些大括号,例如:
void delete() {
if (empty()) {
cout << "Queue is empty!";
}
else {
for (int i = 0; i < q.tail; ++i) { // <-- add brace
q.code[i] = q.code[1+i];
q.title[i] = q.title[i+1]; // <-- do this INSIDE the loop!
} // <-- add brace
q.tail--;
}
show_data();
}
我建议您采用另一种实现方式-将code
和title
成员移至与struct
分开的自己的queue
,然后可以移动的实例。 struct
作为一个单元,例如:
const int maxItems = 10;
struct data {
string code, title;
};
struct queue {
int head, tail;
data items[maxItems];
} q;
...
void delete() {
if (empty()) {
cout << "Queue is empty!";
}
else {
for (int i = 0; i < q.tail; ++i)
q.items[i] = q.items[1+i];
q.tail--;
}
show_data();
}