这段代码会在屏幕上显示什么?

时间:2017-07-02 15:22:41

标签: c++ c++11 iterator set

我需要帮助弄清楚为什么当我运行此代码时会打印出来 (8,8)(8,8)(0,8)(7,8)(6,8)(5,8)(4,8)(3,8)(1,8)(0,8) (8,8)在屏幕上。 我不明白增量和减量运算符如何处理函数u中的迭代器vg。 我知道这个集合将有0,1,3,4,5,6,7,8个元素。但是我不明白如何“走”穿过这个集合。

template <typename T>
std::complex<double> g(T &u, T &v) { return {*--u, *v++}; }

std::set<int> s{3, 8, 4, 7, 0, 1, 1, 5, 7, 3, 6};
std::set<int>::iterator v(s.begin()), w(s.end());
while (v != w) std::cout << g(v, w) << " ";
std::cout << std::endl;

1 个答案:

答案 0 :(得分:2)

您正在递减s.begin()并递增s.end()。两者都会导致未定义的行为