한글로 써도 영어가 너무 많이들어가길래 영어로 썼다.
c++11부터는 erase의 매개변수로 const_iterator이 들어간다.
정확히 뭔지는 모르겠으나.set.erase(set.begin());
을 하면 잘 되는데set.erase(set.rbegin());
을 하면 오류가 난다.
똑같은 iterator인데 왜 안되는지는 잘 모르겠으나 해결방법을 발견했다.
int main()
{
std::set<int> set;
set.insert(15);
std::cout << set.size() << " ";
auto ri = set.rbegin();
auto i1 = --ri.base();
auto i2 = --set.end();
assert(i1 == i2);
set.erase(i1);
std::cout << set.size() << std::endl;
}
이런식으로 하면 된다고 하는데
나는 그냥 가볍게 아래와 같이 작성했다.
auto it=set.rbegin();
set.erase((--it.base()));
'프로그래밍 > 나의 디버깅 노트' 카테고리의 다른 글
[ps][백준 5430] AC에서 배운 점 (0) | 2021.06.02 |
---|---|
[ps] n*n배열을 두개의 그룹으로 나눠서 연산을 구할때 시간최적화 (0) | 2021.06.01 |
[ps][c++] 문자열 다루기 (0) | 2021.05.30 |
[ps][c++] cin을 사용하다가 scanf("%1d")를 사용해야 할 때 (0) | 2021.05.04 |
[ps][c++] test-case마다 vector을 초기화 하는 방법 (0) | 2021.05.02 |