为什么pop_back()在此代码中不起作用?

时间:2020-06-05 21:54:23

标签: c++ vector

s1

当我运行该程序时,它将输出矢量pop_back()中原来的所有元素。向量是否由于使用{{1}}而为空?

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;
});