1.  입출력 속도 향상  

 

#include <iostream>
#include <vector>
using namespace std;

int main() {

    ios_base::sync_with_stdio(false);
    int s, i;
    cin >> s;
    
    vector<int> v(n);
    
    for(i=0; i<n; i++) {
    	cin >> v[n];
    }
    
    for(i=0; i<n; i++) {
    	cout << v[n] << endl;
    }
	return 0;
}

 

  위 코드에서 7번째 줄에 해당하는 ios_base::sync_with_stdio(false); 를 주목해야 한다. 입력과 출력을 할 때에는 버퍼를 사용하는데 ios_base::sync_with_stdio(false);를 사용하지 않는다면 동기화 되어 있다고 표현을 하는데 이는 C++ 표준 스트림과 C 표준 스트림을 병행해서 쓸 수 있다는 것을 말한다. 이렇게 병행해서 사용하면 속도가 느려지게 된다. 

 

 따라서, ios_base::sync_with_stdio(false); 이 문장은 동기화를 하지 않겠다고 선언하는 것이며 이는 C++ 표준 스트리만 사용하겠다는 것이 된다. 따라서, 위 문장이 선언된 프로그램은 독립된 버퍼만을 사용하므로 속도적 측면에서 개선될 수 있다.

 

 속도 비교를 해보면 다음과 같다. 이는 첫째 줄에 정수의 개수 N (= 10,000,000), 둘째 줄부터 N개의 줄에 한 개의 자연수(10,000 이하)가 적힌 파일을 입력받는데 걸리는 시간을 측정한 것이다.

 

 


   2. 만능 헤더 파일   

 

//#include <iostream>
//#include <vector>

#include <bits/stdc++.h> 
using namespace std;

int main() {

    ios_base::sync_with_stdio(false);
    int s, i;
    cin >> s;
    
    vector<int> v(n);
    
    for(i=0; i<n; i++) {
    	cin >> v[n];
    }
    
    for(i=0; i<n; i++) {
    	cout << v[n] << endl;
    }
	return 0;
}

 

 매번 프로그래밍을 할 때 필요한 헤더를 선언하는 것은 불편한 일이다. 하지만, 위의 코드 처럼 bits/stdc++.h 헤더를 하나만 선언하고 cin, cout 같은 입출력 객체와 vector 컨테이너를 맘대로 쓸 수있는 방법이 존재했다. 

 

 bits/stdc++.h 헤더란 표준 라이브러리를 모두 포함하고 있는 헤더이다. 하지만  이 헤더는 GCC 전용 라이브러리이므로 GCC를 지원하는 대회 환경에서 사용해야 한다. 다행히도 대부분의 프로그래밍 환경에서는 이를 지원한다.

 

 이렇게 편리하데 단점은 없을까? 결론부터 말하자면 단점이 존재한다. 먼저 이 헤더는 위에서 언급한 것처럼 GCC가 아닌 다른 컴파일러로 코드를 컴파일 할 경우에는 실패한다. 또한, 불필요한 헤더를 많이 포함하므로 컴파일 하는데 시간이 길어진다. 마지막으로는 이식성이 떨어진다. 이식성이란 특정 환경에서 동작하는 SW 프로그램이 다른 환경으로 변경해도 동작할 수 있는 성질을 말한다.

 

 Dev C++에서도 바로 사용할 수는 없고 컴파일러 설정을 해야한다. 맨 위에서 [도구] - [컴파일러 설정]을 누르고 빨간색으로 표시된 부분에 -std=c++11을 추가한다.

 

 

 

 

 

[참고]

 

www.acmicpc.net/blog/view/56

 

입력 속도 비교

여러가지 언어와 입력 방법을 이용해서 시간이 얼마나 걸리는지 비교해 보았습니다. 방법: 첫째 줄에 정수의 개수 N (= 10,000,000), 둘째 줄부터 N개의 줄에 한 개의 자연수(10,000 이하)가 적힌 파일��

www.acmicpc.net

www.acmicpc.net/blog/view/57

 

출력 속도 비교

여러가지 언어와 출력 방법을 이용해서 시간이 얼마나 걸리는지 비교해 보았습니다. 방법: 총 N개의 줄에 1부터 10,000,000까지의 자연수를 한 줄에 하나씩 출력하는 시간을 측정. 10번 측정해서 평�

www.acmicpc.net