我的结构定义如下:
struct node {
int index;
std::set<StringRef> set1;
std::set<StringRef> set2;
std::set<StringRef> set3;
std::set<StringRef> set4;
};
我然后循环List
node
定义如下:
std::list<node> my_table;
我现在循环浏览此列表并访问set1
和set2
,但这会导致细分错误。
for (std::list<liveness_node>::iterator it = liveness_table.end(); it != liveness_table.begin(); --it) {
std::set<StringRef> in_temp = it->set1;
std::set<StringRef> out_temp = it->set2;
}
答案 0 :(得分:3)
您正在取消引用end
迭代器。你应该使用反向迭代器
for (auto it = liveness_table.rbegin(); it != liveness_table.rend(); ++it)
以相反的顺序遍历列表。
答案 1 :(得分:2)
for (std::list<liveness_node>::iterator it = liveness_table.end(); it != liveness_table.begin(); --it)
您尝试访问liveness_table.end()
,end()
返回最后一个元素+ 1,您不能取消引用并使用end()
。相反,使用反向迭代器:
for (std::list<liveness_node>::reverse_iterator it = liveness_table.rbegin(); it != liveness_table.rend(); ++it)