TIL - 2021.02.28

Wanna be __·2021년 3월 1일
0

TIL

목록 보기
20/45
post-thumbnail

Today, I Learned

C++

  1. C++의 입력의 경우, cin을 단독으로 사용하게 되면, 우수한 성능의 결과를 볼 수 없다고 나와있다.
    오히려 c 문법인 scanf나 printf가 훨씬 좋은 성능을 보인다고 하는데, 다음 설정을 하면 scanf에 버금가는 성능을 낼 수 있다고 한다.
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);

다만 이 방식이 정공법적인것은 아니라고 한다!!

  1. 백준 15552번 문제에서 endl 을 사용하였을때는 시간초과가 났다.
    대신 '\n' 의 개행문자를 직접 넣어주니 통과..
    여기서 확인한 둘의 차이점은

    While the difference is not obvious in smaller programs, endl performs significantly worse than \n because of the constant flushing of the output buffer.

라고 한다.. cout과 endl이 대칭이 맞아 endl을 주로 사용했는데 앞으로는 개행문자에 조금 더 익숙해져야겠다!

  1. c++에서 eof 처리

java에서는 Scanner를 쓸 때 hasNext()를 썼고,
bufferedReader에서는 readline이 null일때 eof 처리를 할 수 있었는데,

여기를 참고하면 c++에서는
1. scanf()가 입력받은 인자의 개수로 파악
2. scanf()와 EOF와 EOF를 비교
3. EOF가 -1임을 이용
4. cin.eof()를 이용

하라고 한다.

    int a, b;
    while (!cin.eof()) {
        cin >> a >> b;
        cout << a + b << '\n';
    }

처음에 위와 같이 4번 방식을 사용했는데, 이는 불가능
파일을 입력 받고나서, 그게 eof인지 확인을 해야하는데, 그러지 않으니 입력대기 상태에서 프로그램이 종료되지 않기때문.

  1. int array를 생성하는 방법
int* arr = new int[20];
int* arr = new int[20]();
int  arr[20] = {0,}

1같이 괄호 없이 동적할당하면 초기화가 되지않는다.
std::fill_n 함수를 통해 array를 다음과 채워넣을 수 있다.

std::fill_n(arr, 20, -1);
  1. 영어 대소문자 바꾸는법
    #include 을 추가하여 transform()을 사용한다.
profile
성장하는 개발자

0개의 댓글