鉴于此代码:
#include <iostream>
using namespace std;
int main()
{
typedef struct node
{
int data;
node* left;
node* right;
} *nodeptr;
nodeptr root, curr, temp;
}
第二个代码:
#include <iostream>
using namespace std;
int main()
{
struct node
{
int data;
node *left;
node *right;
}
node *root, *curr, *temp;
}
我有几个问题:
int* a
和int *a
代表同一件事吗?queue < nodeptr >q
它有效,但在第二个代码中,当我声明queue < node >q
时它不起作用。为什么?答案 0 :(得分:1)
两个代码是否代表相同的东西?
它们几乎代表相同的东西,除了第一个将nodeptr
定义为typedef
名称。
int * a和int * a代表相同的东西吗?
是
对于我声明的第一个代码:
queue < nodeptr >q
它工作但是当我在代码中声明第二个代码时:queue < node >q
它没有用。为什么呢?
queue<nodeptr> q
与queue<node*> q
相同。因此,这种比较是不合适的。
如果使用C ++ 11,您应该可以使用queue<node>
。看到它在http://ideone.com/tkij08工作。
答案 1 :(得分:0)
int * a;和int * a;是相同的。这里的白色空间非常精细,并没有改变任何意义。
队列节点q应该工作。但也许可以在更详细的问题中提出问题。我附上了一些确实可以使queue<node> q;
正常工作的代码。
#include <iostream>
#include <queue>
using namespace std;
struct node
{
int data;
node *left;
node *right;
};
int main()
{
node *root, *curr, *temp;
queue<node> q;
}
答案 2 :(得分:0)
对于你的第二个问题,我只想说你写int* a
或int *a
,这是同一回事。
int* a;
int *a;
int * a;
所有都是相同的,其中a是int类型的指针,infact int*a;
也是一样...
答案 3 :(得分:0)
几乎。两者都定义了struct node
,但第一个也定义了一个指向struct node
的{{1}}指针的类型。
不,他们完全是一回事。空白或缺乏空白并不重要。
因为在第一种情况下,您声明了一个指向节点类型的指针队列,而在第二种情况下,您声明了一个类型为node的对象队列。 nodeptr
可能会对queue
无法满足的内容提出额外要求。如果没有看到node
的来源,很难猜出它可能是什么,但也许它需要某种比较运算符来定义。如果您想了解更多信息,您应该发布示例源代码和您收到的错误消息,而不仅仅是声明状态&#39;它不起作用。