gpt4 book ai didi

c++ - 从 C++ 中的集合中删除最后一个元素

转载 作者:行者123 更新时间:2023-12-02 09:48:23 27 4
gpt4 key购买 nike

    #include <bits/stdc++.h>
#define FIN ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define SZ(s) int(s.size())
using namespace std;
typedef long long ll;
int main()
{
FIN;
set<ll>s;
ll N, M;
cin >> N >> M;
ll x;
for(ll i = 0; i < N+M; i++)
{
cin >> x;
if(x==-1)
{
auto x = *s.rbegin();
cout<<x<<'\n';
//-------------------------------------------------------------------------------------------------
s.erase( --s.end() ); // --s.end() when replaced with s.rbegin(), gives an error
//------------------------------------------------------------------------------------------------
}
else
{
s.insert( x );
}
}

}
在水平线之间的代码中,我试图从集合中删除最后一个元素。
当我写 s.erase(s.rbegin())而不是 s.erase(--s.end()) ,它给了我一个编译错误说:
 **error: no matching function for call to ‘std::set<long long int>::erase(std::set<long long int>::reverse_iterator)’
20 | s.erase( s.rbegin() );**
不是 s.rbegin() 和 --s.end() 指向同一个元素吗?

最佳答案

std::set::rbegin 返回 反向迭代器 ,这在技术上指向同一件事,但该集合没有接收 reverse_iterator 作为参数的删除方法。

关于c++ - 从 C++ 中的集合中删除最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62940589/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com