s1
当我运行该程序时,它将输出矢量pop_back()
中原来的所有元素。向量是否由于使用{{1}}而为空?
答案 0 :(得分:2)
while (!s1.empty() && s1.back().first <= x )
逻辑上等于:
while (!s1.empty())
因为向量中的所有first
元素都小于10,这意味着while
仅在向量为空时才终止。
然后,在for
循环中,您越界访问,从而导致未定义的行为。
只需将for
循环更改为此:
for (int i=0; i<s1.size(); ++i)
{
cout << s1[i].first << " " << s1[i].second << endl;
}
您还可以在std::for_each()
标头中使用<algorithm>
:
std::for_each(s1.begin(), s1.end(), [](auto const &it) {
cout << it.first << " " << it.second << endl;
});