结构向量分配错误?代码不工作
Faulty Allocation of Vector of Structures? Code not working
我的代码在标记点之后不工作。
#include<iostream>
#include<vector>
using namespace std;
struct node{
int data;
int level;
};
int main()
{
node x;
x.data=0;
int j=0;
int n;
int strt,lv=1;
cout<<"Enter No. of Nodes: ";
cin>>n;
vector<node> adj[n];
int m,data,nb=0;
while(j<n)
{
cout<<"Enter No. of Neighbours of "<<j<<": ";
cin>>m;
while(nb<m)
{
cin>>x.data;
x.level=0;
adj[j].push_back(x);
nb++;
}
nb=0;
j++;
}
vector<node>::iterator i;
/*for(j=0;j<n;++j)
{
cout<<j;
for(i=adj[j].begin();i!=adj[j].end();i++)
{
cout<<"->"<<(*(i)).data;
}
cout<<endl;
}*/
node y,z;
cout<<"Enter Starting Node: ";
cin>>strt; //This Point-*****************************
cout<<"LOL";
y.data=strt;
y.level=0;
vector<node> frontier;
vector<node> next;
frontier.push_back(y);
while(!frontier.empty())
{
z=frontier.back();
frontier.pop_back();
//next.clear();
for(i=adj[z.data].begin();i!=adj[z.data].end();i++)
{
if((*(i)).level==lv-1)
{ (*(i)).level=lv;
next.push_back((*(i)));
}
}
frontier=next;
lv++;
}
for(i=next.begin();i!=next.end();i++)
{
cout<<(*(i)).data<<" ";
}
return 0;
}
终端继续接受输入,就好像程序处于无限循环中一样 - 但它并没有陷入无限循环,因为即使在调试解释器代码时也没有执行 cout<<"LOL" 语句读取 cout<<"LOL" 并转到下一行。请帮助。
使用cout<<"LOL"<<endl;
刷新输出。
相信调试器。如果转到下一行,则执行该语句。
由于您没有清除向量 next,因此您在最后 while 的每次迭代中将 next 保留在 frontier 循环。所以 frontier 永远不会为空。所以你的代码陷入无限循环。
之前把你的评论标志去掉就行了
next.clear();
我的代码在标记点之后不工作。
#include<iostream>
#include<vector>
using namespace std;
struct node{
int data;
int level;
};
int main()
{
node x;
x.data=0;
int j=0;
int n;
int strt,lv=1;
cout<<"Enter No. of Nodes: ";
cin>>n;
vector<node> adj[n];
int m,data,nb=0;
while(j<n)
{
cout<<"Enter No. of Neighbours of "<<j<<": ";
cin>>m;
while(nb<m)
{
cin>>x.data;
x.level=0;
adj[j].push_back(x);
nb++;
}
nb=0;
j++;
}
vector<node>::iterator i;
/*for(j=0;j<n;++j)
{
cout<<j;
for(i=adj[j].begin();i!=adj[j].end();i++)
{
cout<<"->"<<(*(i)).data;
}
cout<<endl;
}*/
node y,z;
cout<<"Enter Starting Node: ";
cin>>strt; //This Point-*****************************
cout<<"LOL";
y.data=strt;
y.level=0;
vector<node> frontier;
vector<node> next;
frontier.push_back(y);
while(!frontier.empty())
{
z=frontier.back();
frontier.pop_back();
//next.clear();
for(i=adj[z.data].begin();i!=adj[z.data].end();i++)
{
if((*(i)).level==lv-1)
{ (*(i)).level=lv;
next.push_back((*(i)));
}
}
frontier=next;
lv++;
}
for(i=next.begin();i!=next.end();i++)
{
cout<<(*(i)).data<<" ";
}
return 0;
}
终端继续接受输入,就好像程序处于无限循环中一样 - 但它并没有陷入无限循环,因为即使在调试解释器代码时也没有执行 cout<<"LOL" 语句读取 cout<<"LOL" 并转到下一行。请帮助。
使用cout<<"LOL"<<endl;
刷新输出。
相信调试器。如果转到下一行,则执行该语句。
由于您没有清除向量 next,因此您在最后 while 的每次迭代中将 next 保留在 frontier 循环。所以 frontier 永远不会为空。所以你的代码陷入无限循环。
之前把你的评论标志去掉就行了
next.clear();