C++ 기본 이론(1)
포스트
취소

C++ 기본 이론(1)



C++

  • 코딩테스트 공부를 위해서 Java가 아닌 C++를 공부하기로 했다. C++은 어려운 언어지만, 알고리즘(코딩테스트)를 위한 C++은 어렵지 않다고 하는 이야기를 믿어보기로 했다..
  • 이 글은 인프런의 큰돌님의 코딩테스트 강의인 10주완성 C++ 코딩테스트 바탕으로 C++에 대한 기본적인 이해와 예제 코드들을 작성 할 예정이다.
  • 혹시나 이 글이 문제가 될 시 삭제하겠습니다.



1.2 기본



include

  • C++의 모든 라이브러리를 이용하기 위해서는 상단에 헤더 파일을 include 시켜줘야 한다.
1
#include <bits/stdc++.h>
  • 위에서 나타내는 <bits/stdc++.h>이 C++의 모든 표준 라이브러리를 포함한 헤더 파일이다.



namespace

  • include가 잘 되었다면 namespace를 지정하여 코드를 호출할 때 더 간편하게 호출할 수 있다.
1
using namespace std;
  • 라이브러리의 변수명 중복을 방지하기 위해 namespace를 std로 범위 제한을 걸어 준다.



#### typedef

  • C++에서는 타입의 별칭을 지정하여 사용할 수 있다.
  • 사용 방법: typedef
1
typedef int i;
  • 위와 같이 작성해두면 ‘int’ 대신 ‘i’로 int형 변수를 선언할 수 있다.



define

  • define으로 상수, 매크로를 정의할 수 있다.
1
2
#define PI 3.14
#define loop(i, n) for(int i=0; i<n; i++)
  • 이런 식으로 상수나 반복문 등을 미리 정의해놓고 사용할 수 있다.



STL:question:

  • Standard Template Library
  • 자료구조, 함수 등을 제공하는 라이브러리로 알고리즘, 컨테이너, 이터레이터, 펑터를 제공



알고리즘

  • 정렬, 탐색 등에 관한 함수로 이루어져 있다.


컨테이너

  • 시퀀스 컨테이너
  • 연관 컨테이너
  • 정렬되지 않은 연관 컨테이너
  • 컨테이너 어댑터


이터레이터

펑터

  • 함수 호출 연산자를 오버로드하는 클래스의 인스턴스



1.3 입력과 출력

  • C++의 입력에는 cin, scanf, getline 출력에는 cout, printf가 있는데 보통은 cin, cout를 이용한다.
  • 그 이유로는 scanf와 printf는 형식을 지정해야 하는 번거로움이 있기 때문

cin, cout

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <bits/stdc++.h>
using namespace std;

string a, b;

int main() {
    cin >> a >> b;
    cout << a << "\n";
    cout << b << "\n";
    return 0;
}

/*
입력
재미있는 코딩

출력
재미있는 
코딩
*/
  • cin의 경우 개행문자까지 입력 받기 때문에 “재미있는 코딩”을 입력했을 때 a에는 “재미있는 “ 까지만 들어가게 되기 때문에 개행문자 다음에 올 문자를 b에 담아주면 된다.



scanf, printf

  • scanf의 경우는 형식을 지정해서 입력을 받을 수 있고 printf의 경우는 형식을 지정해야 출력할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <bits/stdc++.h>
using namespace std;
int a;
double b;
char c;

int main() {
    scanf("%d %lf %c", &a, &b, &c);
    printf("%d\n", a);
    printf("%lf\n", b);
    printf("%c\n", c);
    return 0;
}

/*
입력
1
2.313
a

출력
1
2.313
a
*/

주의! printf로 string 타입을 출력할 때 문자열.c_str() 명령어를 이용하여 문자열에 대한 포인터(char *) 타입으로 바꾸어 주어야 한다.

scanf, printf용 타입과 형식

형식 타입
d int
c char
s string
lf double
ld long long
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.