Jos*_*eld 3 c++ containers iterator set
请考虑以下代码:
std::set<int> s;
auto it = s.begin();
s.insert(1);
s.insert(2);
std::cout << *it << std::endl;
Run Code Online (Sandbox Code Playgroud)
输出(至少对我而言)是2.这里发生了什么事?什么it时候我取消引用它的状态?
我知道当我调用begin()一个空集时,我得到一个等价的迭代器end().我也知道调用inserta set不会使其迭代器失效.迭代器是否保持等效,end()即使我现在已经插入元素set,所以现在我得到未定义的行为?这是由标准定义的吗?
当你s.begin()在这里调用时,它会返回一个结束迭代器,因为容器是空的.插入符号不会使此迭代器失效:每次插入后,此迭代器仍然是结束迭代器.
取消引用此迭代器会导致程序显示未定义的行为(无法取消引用结束迭代器).
| 归档时间: |
|
| 查看次数: |
342 次 |
| 最近记录: |