【发布时间】:2022-01-03 15:05:22
【问题描述】:
我有一个集合列表:
std::list<std::set<int>> nn = {{1,2},{4,5,6}};
我想打印出 end() 所指的元素:
for (auto el : nn){
std::cout << *el.end() << std::endl;
}
我得到的结果是: 2 和 3.
我不知道这些值是从哪里来的。有人可以帮我吗?
【问题讨论】:
-
这些值来自未定义的行为。
-
这是未定义的行为 - 无效代码。
-
end()没有引用任何元素,取消引用它是非法的。如果你想要最后一个元素使用*rbegin() -
end()不是容器的元素。它是列表末尾之后的第一个位置。 -
en.cppreference.com/w/cpp/container/set/end "充当占位符;尝试访问它会导致未定义的行为"