C++ 用于导致故障的循环和向量
我试图创建一个for循环,该循环通过一个向量运行,将某些内容推送到队列中,更新向量结构的所有适当元素,然后再次循环,直到向量为空 我遇到的问题是,通过for循环运行的函数似乎没有更新向量元素,我得到的输出是相同的,尽管我知道它应该在更改 这里是项目要点的链接,它只是有很多填充物,我不得不手工输入很多东西,所以有点混乱 首先,我将向量传递给while循环中的函数C++ 用于导致故障的循环和向量,c++,for-loop,vector,C++,For Loop,Vector,我试图创建一个for循环,该循环通过一个向量运行,将某些内容推送到队列中,更新向量结构的所有适当元素,然后再次循环,直到向量为空 我遇到的问题是,通过for循环运行的函数似乎没有更新向量元素,我得到的输出是相同的,尽管我知道它应该在更改 这里是项目要点的链接,它只是有很多填充物,我不得不手工输入很多东西,所以有点混乱 首先,我将向量传递给while循环中的函数 void queueNodes(vector<vertex>& list, queue<vertex>&
void queueNodes(vector<vertex>& list, queue<vertex>& q);
void queueNodes(向量和列表、队列和q);
因此
int counter = 0;
while (counter < 11) {
queueNodes(nodes, q);
counter++;
}
int计数器=0;
while(计数器<11){
排队节点(nodes,q);
计数器++;
}
while循环是为了确保我遍历向量的次数足够多。现在在函数中,我检查结构的incomingEdges是否为0,如果为,我将其推入队列并更新隔壁的incomingEdges:
void queueNodes(vector<vertex>& nodes, queue<vertex>& q) {
for (auto i : nodes) {
cout << endl << i.vertexName << " ";
if (i.incomingEdges == 0) {
i.nextDoorTop->incomingEdges--;
i.nextDoorMiddle->incomingEdges--;
i.nextDoorBottom->incomingEdges--;
q.push(i);
cout << "foo";
} else {
cout << "bar";
}
}
void queueNodes(向量和节点、队列和q){
用于(自动i:节点){
无法输入边缘--;
q、 推(i);
coutfor(auto&i:nodes)
提供元素的副本。请尝试for(auto&i:nodes)
如果你想修改向量的元素。我试过了,没有骰子。有机会吗?请注意,你将在队列中有顶点的副本。我在gisthub@Beta上放置了一个SSCCE,我正在处理某些必须手动输入的数据,所以我不想在这一页上弄乱。链接是
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct vertex {
char vertexName;
int incomingEdges;
vertex* nextDoorTop;
vertex* nextDoorMiddle;
vertex* nextDoorBottom;
};
void queueNodes(vector<vertex>& nodes);
int main() {
vertex s, A, G, D, B, H, E, C, I, F, t;
s.vertexName = 's';
s.incomingEdges = 0;
s.nextDoorTop = &A;
s.nextDoorMiddle = &D;
s.nextDoorBottom = &G;
A.vertexName = 'A';
A.incomingEdges = 2;
A.nextDoorTop = &B;
A.nextDoorMiddle = &E;
G.vertexName = 'G';
G.incomingEdges = 1;
G.nextDoorTop = &D;
G.nextDoorMiddle = &E;
G.nextDoorBottom = &H;
D.vertexName = 'D';
D.incomingEdges = 2;
D.nextDoorMiddle = &E;
B.vertexName = 'B';
B.incomingEdges = 1;
B.nextDoorTop = &C;
H.vertexName = 'H';
H.incomingEdges = 1;
H.nextDoorTop = &E;
H.nextDoorMiddle = &I;
E.vertexName = 'E';
E.incomingEdges = 4;
E.nextDoorTop = &C;
E.nextDoorMiddle = &F;
E.nextDoorBottom = &I;
C.vertexName = 'C';
C.incomingEdges = 3;
C.nextDoorMiddle = &t;
I.vertexName = 'I';
I.incomingEdges = 2;
I.nextDoorTop = &F;
I.nextDoorMiddle = &t;
F.vertexName = 'F';
F.incomingEdges = 2;
F.nextDoorMiddle = &t;
t.vertexName = 't';
t.incomingEdges = 3;
vector<vertex> nodes { s, A, G, D, B, H, E, C, I, F, t };
cout << "Vertex Name: " << " Number Of Edges: " << endl;
for (auto i : nodes) {
cout << i.vertexName << " " << i.incomingEdges << " "
<< endl;
}
int counter = 0;
while (counter < 11) {
queueNodes(nodes);
counter++;
}
return 0;
}
void queueNodes(vector<vertex>& nodes) {
for (auto& i : nodes) {
cout << endl << i.vertexName << " ";
if (i.incomingEdges == 0) {
i.nextDoorTop->incomingEdges--;
i.nextDoorMiddle->incomingEdges--;
i.nextDoorBottom->incomingEdges--;
cout << "foo";
} else {
cout << "bar";
}
}
}