C++ 기본정리(2)

kimseyoung·2023년 11월 6일
0

C, C++

목록 보기
6/6

입력

대표적으로 cin과 scanf가 있다. cin은 개행문자 직전 까지 입력을 받고 scanf는 형식을 지정해서 입력을 받는다.

cin, scanf Usage

int a;
int main()
{
	cin >> a;
    scanf("%d", &a);
    
    return 0;
}

ps) cin은 개행문자(space, enter) 이후는 입력받지 않는다.

ps2) scanf의 타입들

  • %d(int), %lf(double), %c(char), %ld(long long), %s(string)

ps3) getline >> 개행 문자까지 포함하여 입력을 받는다

string s;
int main()
{
	getline(cin, s); // cin 스트림의 입력을 문자열 s에 받는다.
    cout << s << '\n';
    return 0;
}

여러 줄의 문자열을 받을때에는 bufferflush를 통해 버퍼를 초기화 시켜준 뒤 입력을 받아야 한다.
(초기 cin으로 받을 때, 개행문제 직전까지 입력을 받게되기 때문에, 버퍼에 개행문자가 남게 된다.)

int T;
string s;
int main()
{
	cin >> T;
    string bufferflush;
    getline(cin, bufferflush); // bufferflush(null)
    for(int i = 0; i < T; i++) {
    	getline(cin, s);
        cout << s << "\n";
    }
    return 0;
}

출력

출력은 cout 과 printf가 있다. 마찬가지로 printf는 형식을 지정해서 출력하게 된다.

string a = "dddd";
string b = "eeee";

int main() {
	cout << a << endl; //endl = '\n'
    cout << a << " " << b << endl;
    printf("%s\n", a);
    return 0;
}

ps) cout의 실수 소수자리 조정
cout.precision(자릿수 + 1)을 사용하여 조절 가능(반올림)

double a = 1.23456789;

cout.precision(4);
cout << a << endl; //1.23

ps) printf의 실수 소수자리 조정

double a = 1.23456789;
int b =12;
int c = 2;

printf("%.6lf\n", a); /// 1.234567
printf("%02d\n"); //12
printf("%02d\n"); //02
```

### pair & tuple

pair와 tuple은 타입이나 자료구조가 아닌, C++에서 제공하는 utility 라이브러리 헤더의 템플릿 클래스이다.

pair는 first와 second라는 멤버 변수를 가지며, 두가지 값을 담아야 할때 쓴다.
tuple은 세가지 이상의 값을 담을 때 쓰는 클래스이다.

1. tie
tie는 pair나 tuple로 부터 값을 가져올 때 사용한다. (a = pi.first 같이 멤버 접근자로도 가져올 수 있다. 다만, tie는 다른 방식을 제공한다.)
tuple은 (get<0>, get<1> get<int(타입이 아닌 인덱스 값을 의미> tie 없이 꺼낼 수 있다.

```
pair<int, int> pi;
tuple<int, int, int> tl;
int a, b, c;
int main()
{
	pi = {1, 2}; // tuple에 멤버 할당 (first -> 1, second -> 2)
    tl = make_tuple(1, 2, 3); // make_tuple 함수를 이용하여 생성하여 할당.
    tie(a, b) = pi; // tie함수를 이용하여, a, b에 각각 pi로 부터 first, second 할당.
    cout << a << " : " << b << "\n"; 
    tie(a, b, c) = tl; // 마찬가지로 순서대로 a, b, c 에 할당.
    ...
    
    a = get<0>(tl); // tuple의 첫번째 원소
    b = get<1>(tl); // tuple의 두번째 원소

}
 ```
 
### auto 타입

auto는 타입추론을 하여 결정되는 타입이다. 자동으로 타입을 추론해준다. 주로 복잡하고 긴 타입의 변수명을 대신할 때 쓰인다.

```
int main()
{
	vector<pair<int, int>> = v; // pair의 vector
    for(int i = 1; i <= 5; i++)
    {
    	v.push_back({i, i});
    }
    for(auto it : v) { // auto it를 이용해 벡터의 요소 타입을 추론
    	cout << it.first << " : " << it.second << '\n';
    }
    
    return 0;
}
```
 
profile
Back-end Developer, DevOps Engineer

0개의 댓글