C++
#include <algorithm>
#include <list>
int main() {
std::list<int> lst;
lst.push_back(5);
lst.push_back(1);
std::sort(lst.begin(), lst.end());
return 0;
}
당연하다는 듯이 이런 코드를 작성한 적이 있는데 sort 부분에서 에러가 뜬다.
이유는 아래와 같다.
template<class RandomIt>
void sort( RandomIt first, RandomIt last );
RandomIt must meet the requirements of ValueSwappable and LegacyRandomAccessIterator.
std::sort 함수의 매개변수로 오는 반복자는 반드시 RandomAccessIterator 타입이어야 한다.
벡터는 반복자가 RandomAccessIterator 타입이므로 문제가 없었다.
그러나 리스트는 반복자가 BidirectionalIterator 타입이다. 그러니 <algorithm>에 정의되어 있는 std::sort를 리스트에 적용할 수 없다.
대신 리스트에는 별도의 sort 함수가 제공되므로 코드를 아래와 같이 수정하면 사용 가능하다.
#include <list>
int main() {
std::list<int> lst;
lst.push_back(5);
lst.push_back(1);
lst.sort();
return 0;
}
'백준 > 이걸 몰랐네' 카테고리의 다른 글
예제 입출력은 분명 맞는데 틀렸다고 할때 대처법 (0) | 2020.08.31 |
---|---|
배열을 fill()로 초기화해주자. (0) | 2020.08.31 |
백준 11720번 숫자의 합(문자로 안 받고 정수로 받기) (0) | 2020.08.30 |
std::string 빈 문자열에 값 대입하는 방법 (0) | 2020.08.27 |
cin과 scanf는 공백 문자를 어떻게 인식하는가 (0) | 2020.08.25 |