我正在编写一个必须使用图形的C ++程序。我对其中一种方法有一个小问题。所以,我的结构看起来像
struct graph {
std::vector <std::vector<int>> gr;
};
我有一个方法必须返回起源于顶点的弱组件内的顶点,并且只能使用现有顶点调用它。
所以这是:
std::vector<int> weak_component(const graph& g, int vertex) {
std::vector<int> ret;
if (vertex >= 0 && vertex < g.gr.size()) {
for (std::vector<std::vector<int>>::size_type i = 0;
i < g.gr[vertex].size(); i++) {
for (std::vector<int>::size_type j = 0; j < g.gr[i].size(); j++) {
std::fill(ret.begin(), ret.begin(), g.gr[i][j]);
std::cout << vertex;
}
}
}
return ret;
}
我正在尝试填充另一个向量并将其返回。 例如:如果我用数据填充测试图
0, 1
1, 2
1, 3
调用方法weak_component(g, 0)
返回值应为0, 1, 2, 3
。
在我的方法中我做错了什么?
谢谢你的帮助。
答案 0 :(得分:0)
改变这个:
for (std::vector<std::vector<int>>::size_type i = 0;
i < g.gr[vertex].size(); i++) {
for (std::vector<int>::size_type j = 0; j < g.gr[i].size(); j++) {
std::fill(ret.begin(), ret.begin(), g.gr[i][j]);
std::cout << vertex;
}
}
为:
for (int adj : g.gr[vertex]) {
for (int elem : g.gr[adj]) {
ret.push_back(elem);
std::cout << vertex;
}
}
除非必须,否则不要使用索引。迭代范围。
你的fill
什么也没做。将其替换为push_back
以将内容添加到返回值。
我也很想添加sort
和unique
- erase
来清理它。