혼자 공부한거라 틀린내용이 있을수 있습니다.
1. ios_base::sync_with_stdio(false);
C++ 에서 입출력을 하기위해
#include <iostream> 을 사용한다.
이때 iostream 라이브러리는 C++ 뿐만 아닌 C언어의 입출력 구문도 할수 있도록 동기화를 해준다.
즉 C언어의 stdio와 C++ 의 iostream 을 모두 가져온다.
단순하게 생각하면 모든 입출력 순간 stdio 와 iostream 인지 구분하고 그에 맞는 함수를 호출하는 동작을 할거 같음
그러므로 stdio를 비활성화 시킴으로 오직 C++의 iostream만 사용해 시간을 줄이는 방법인거 같음.
2. cin.tie(NULL);
위와 같은 문장을 수행하면 name을 입력 받기전에 Enter name : 문장이 출력되고 name을 받게 된다.
즉 cout 수행이 완료되기 전까지 즉 cout구문이 완전히 출력된때까지 cin을 받을수 없다.
cout 동작에 대충 설명하자면 cout 버퍼로 출력할 데이터를 보내고 자동으로 출력 함수를 호출하여 화면에 출력해준다.
cin은 위의 cout의 출력 동작이 된것을 확인하고 그 이후에 데이터를 받게된다.
하지만 cin.tie(null)을 수행하면 cout과 cin의 연결을 풀어서 출력의 수행 여부와 상관 없이 데이터를 받을수 있게된다.
즉 "Enter name:" 이 나오기 전에 사용자의 입력을 받을수도 있다.
cin.tie(null)을 사용 했을때도 cout과 cin의 순서를 유지시키고 싶다면 std::flush나 std::endl 를 추가해서 사용해야한다.
하지만 이를 너무 많이 사용하면 cin.tie(null) 쓴거랑 안쓴거랑 별 차이 없다.
cin.tie(null)은 cout과 cin을 같이 사용안할때, 또는 작은 값들을 여러번 받아올때 사용하면 속도 개선에 긍정적인 영향을 줄거같음 ㅇㅅㅇ..
3. endl 대신 개행문자 사용 ( \n )
보통 개행문자 \n은 문자열을 출력할때 사용할수 있어 주로 endl 을 사용했었는데
이또한 속도에서 차이가 있다 ㅇㅅㅇ..
아직 모든것을 이해 못했지만
\n과 endl 모두 버퍼를 출력하는 연산을 수행한다.
endl은 cout의 버퍼를 출력하고 비워주는 flush() 함수까지 호출한다.
하지만 \n 은 버퍼만 출력하고 flush()는 안하므로 좀더 빠른 수행
'언어공부 > C++' 카테고리의 다른 글
[ C++ ] 기초정리 4. 고급 변수 사용 (0) | 2022.07.18 |
---|---|
[ C++ ] 기초 정리 3. 조건문, 반복문, 네임스페이스 (0) | 2022.07.18 |
[ C++ ] 기초 정리 2. 자료형과 연산자 (0) | 2022.07.18 |
[ C++ ] C++ for문, for-each문 (0) | 2022.06.21 |
[ C++ ] C++ 에서 EOF (0) | 2022.06.14 |