본문 바로가기

C++ and STL

(3)
[STL] 컨테이너 정렬상태 확인 is_sorted() C++ STL의 헤더에는 컨테이너의 정렬과 관련된 여러가지 함수가 포함되어 있다. 이 중에 is_sorted() 메서드를 이용하면 컨테이너의 정렬상태를 쉽게 확인할 수 있다. 아래의 예제는 숫자를 1부터 8까지 받아서 이 숫자들이 오름차순으로 정렬되어 있으면 "ascending"을 내림차순으로 정렬되어 있으면 "descending"을 정렬되어 있지 않으면 "mixed"를 반환한다. #include #include #include using namespace std; array arr; int main() { ios::sync_with_stdio(0); cin.tie(0); for (int i = 0; i > arr[i]; if (is_sorted(arr.begi..
segmentation fault를 조심하자 C++ STL의 컨테이너를 다룰 때 정상적으로 컴파일은 되었으나, 실행단계에서 segmentation fault를 발생시키는 경우가 종종 발생한다. segmentation fault는 주로 할당되지 않은 메모리 공간에 접근할 때 발생한다. 아래 예제에서는 크기 10의 배열을 만들고 각 배열에 값을 할당하고 있다. #include #include #include using namespace std; array arr; int main() { ios::sync_with_stdio(0); cin.tie(0); int T, elm=10; cin >> T; while (T--) { while (elm--) { cin >> arr[i]; } sort(arr.begin(), arr.end()); cout T; whi..
[C++] endl을 쓰지말자 알고리즘 문제를 풀다보면 아주 많은 수의 입력을 받아야 하는 경우가 종종 있다. 일반적으로 C++에서 입력은 cin을 통해서 받고, 출력은 cout을 통해 하게 된다. 출력을 하게 되면 출력 문 끝에 개행을 해야 하는 경우가 대부분이다. 이경우 endl을 쓰게 되는데, endl의 역할은 개행문자("\n")를 출력할 뿐아니라 출력 버퍼를 비우는 일까지 수행한다. 그런데 버퍼를 비우는 작업이 매우 느린 작업이다. 따라서, endl을 사용해서 버퍼를 비우는 작업까지 수행할 필요는 없다. 이 작업만 하지 않아도 충분히 속도가 빨라진다. 입력을 받은 cin의 경우에도 입력 전에 출력 버퍼를 비우는 작업을 한다. 그리고 cin과 cout은 묶여있다. 따라서, 이 묶음을 풀어줄 필요가 있다. 아래 구문을 사용하면 된..