반복문

2025. 2. 3. 22:29·C++

세가지 반복문이 있다. 포, 와일, 두와일.

    // 반복문 for
    for (int i = 0; i < len; i++) {
    	i가 len보다 작을때까지 반복
    }

    // 반복문 while
    while (condition) {
    	조건이 참인 경우 반복
    	if (조건이 만족하면) break;
    }

    // 반복문 do while
    do {
    	일단 실행하고 조건을 검사함.
        선실행 후판단.
    }
    while (조건)

 

 

입출력 성능 올리기

👉 cin.tie(NULL)과 ios_base::sync_with_stdio(false) 를 사용해서 입출력을 더 빠르게 처리할 수 있다.

대게 main 함수의 첫번째 줄에 작성한다.

예시)

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

int main() {
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);
    
    int T;
    cin >> T;
    cout << T;
    
    return 0;
}

 

속도가 왜 느린지부터 알아보자면 그동안 cin, cout만 사용했지만 C의 stdio와 C++의 iostream은 동기화 되어있어서 C++에서도 scanf, printf 사용할 수가 있다. 단 이 경우에는 iostream과 stdio의 버퍼를 모두 사용하여 딜레이가 발생한다(성능저하)

대신 두 스트림이 동기화하여 입출력에 있어 C와 C++의 IO(Input/Output)을 혼용해 쓸 경우 합리적이고, 스레드(thread)로부터 안전하다. 속도가 그만큼 느려지겠지? 그래서 sync_with_stdio(false)를 써주면 동기화를 비활성화 해서 성능을 높일 수 있다는 것임.(C++ 표준 스트림이 독립적으로 IO 버퍼링을 하게 되어 많은 양의 입출력이 있을 경우 성능이 많이 좋아진다.)

 

🛑 주의사항!

동기화가 비활성화된 경우,버퍼가 분리되었기 때문에 cin과 C의 scanf, gets, getchar 등을 같이 사용하면 안되고,cout와 C의 printf, puts, putchar 등과 같이 사용하면 안된다.

 

그럼 cin.tie(NULL)는 뭔데

원래 cin과 cout은 묶여있다. 입력 요청이 들어왔는데 그 전에 출력 작업이 있었다면 버퍼를 비워줘야 입력을 받을 수 있다는 것. 그러면 입출력을 할 때마다 버퍼를 비워야하면 시간이 오래걸리겠지. 그래서 cin.tie(NULL)를 통해서 입출력 묶음을 풀어주는 것이다. 대신 풀어주면 입출력 순서가 보장되지 않게 된다. 입력을 한번에 받고 출력을 한번에 처리하는 것을 볼 수 있는데 버퍼를 매번 지우는 것이 아니라 나중에 한번에 비운다는 것임.

 

endl 대신 "\n"

endl은 개행하는 기능 뿐 아니라 출력 버퍼를 비우는 역할도 있다. 이 출력 버퍼를 비우는 작업도 상당히 시간을 잡아먹기에 마지막 한 번에 출력을 비우는 것이 좋다. (물론, 버퍼가 꽉차면 알아서 비워준다)

+) endl은 출력 버퍼를 비우기 때문에 위에서 다룬 cin.tie(NULL)의 역할인 묶음을 끊어주는 효과를 볼 수 없게 한다. 그렇기 때문에 cin.tie(NULL)를 사용하면 \n을 사용해서 개행해야 됨.

 

EOF(end of file) - control + z로 끝냈을 때 루프 탈출하기

cin.eof(): 입력을 정해진 만큼 하는 것이 아니라 원하는 만큼 입력하고 종료하는 방법이다. 

while(1){
        cin >> a >> b;
        if(cin.eof()) break;
        else cout << a+b << endl;
    }

 

'C++' 카테고리의 다른 글

조건문  (0) 2025.02.03
입출력과 사칙연산  (0) 2025.02.03
'C++' 카테고리의 다른 글
  • 조건문
  • 입출력과 사칙연산
엽다고
엽다고
얼리지 않으면 상해버려
  • 엽다고
    개발 냉장고
    엽다고
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Computer organization(컴퓨터구조..
      • Swift
      • Godot
      • C++
      • Python
      • 디자인
        • HIG
        • 디자인 시스템
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    디자인시스템
    조건문
    테이터 타입
    EOF
    암묵적인 언래핑
    옵셔널
    Swift 문법
    논리 연산
    swiftUI
    옵셔널 바인딩
    Optional
    implicitly unwrapped
    앱개발
    any
    문자열 보간
    타입검사
    형변환
    컴포넌트
    C++
    SWIFT
    파운데이션
    가이드라인
    코딩테스트
    지마켓 디자인시스템
    AnyObject
    성능
    반복문
    ios
    강제 언래핑
    코테
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
엽다고
반복문
상단으로

티스토리툴바