1주차(2) - 데이터 구조 학습을 위한 C++ 언어 기초
여러가지 데이터 구조를 구현해보고 이를 실습하기 위해서는 C++ 언어에 대해서 어느정도 알아야할 필요성이 있음.
C++ 언어의 특징
1. 객체지향적임. (객체지향 언어의 장점을 수용, C + OOP)
2. 기존 C언어의 모든 특징을 포함하는 언어임 (기존 C언어 프로그램과 호환)
3. 사용자가 정의하는 data type에 대한 특징을 지원함 (= class를 지원함)
4. 대규모 프로그래밍에 적합한 특징을 지원함.
5. 유용한 데이터 구조와 알고리즘을 지원하는 standard library를 지원함.
C++ 프로그램의 기본 구조
기본적인 standard input/output 명령을 수행하기 위해서는 아래와 같은 기본적인 구성을 갖춰야 한다.
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
주석 (Comment)
C++ 언어에서는 다음 두 가지 스타일의 주석을 사용할 수 있음. 두 번째 주석스타일의 경우 기존 C언어에서 존재하던 스타일인데 C++는 C언어의 모든 특징을 포함하기 때문에 해당 주석 스타일을 동일하게 사용하는 것이 가능함.
// Comment line
/*
comment line
*/
기본 I/O Stream
특히 주황색으로 표시된 stream을 가장 많이 사용함.
- input stream : cin
- output stream : cout, clog, cerr
기본 I/O Operator
아래의 C++ 프로그램은 n이라는 정수형 변수에 사용자로부터 값을 입력받고 해당 값을 출력하는 프로그램 이다.
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
cout << n << endl;
return 0;
}
1. input operator (extraction operator) >>
주어진 변수로 해당 type의 데이터를 읽어들임
2. output operator (insertion operator) <<
주어진 데이터를 자동으로 해당 type의 형식으로 출력
해당 operator 들은 아래와 같이 한 명령문장에 연속적으로 사용하는 것이 가능하다. 화살표 방향으로 해당값이 이동한다는 느낌으로 기억하면 혼동없이 사용할 수 있다.
#include <iostream>
using namespace std;
int main()
{
cin >> x >> y >> z;
cout << x << y << z << endl;
return 0;
}
이를 기존 C언어에서 사용하던 형식과 각각 비교해보면 다음과 같은 특징을 발견할 수 있다.
#include <iostream>
using namespace std;
int main()
{
int n;
// input
cin >> n;
scanf("%d", &n);
// output
cout << n << endl;
printf("%d\n", n);
return 0;
}
C언어의 경우에는 Conversion Spec(%)을 명시해서 입력 또는 출력해야하는 데이터의 타입을 구체적으로 지정했지만, C++의 경우 이러한 과정이 전혀 포함되지 않고 오직 입력받아서 저장할 변수, 출력할 변수값 만을 지정한다.
이것이 가능한 이유는 변수를 선언하는 시점에서 타입이 지정되기 때문에 컴파일러가 이를 알아서 판단해주기 때문이다. 그래서 C++ 언어를 사용하면 C언어에 비해서 더 융통성 있는 I/O 프로그램을 작성하는 것이 가능하다.
그리고 위의 코드에서 "endl" 부분은 개행 ("\n")의 의미라고 생각하면 된다.
identifiers
C++ 언어에서 사용자에 의해 이름이 할당되는 요소들은 아래와 같으며 이들은 모두 사전에 사용자에 의해 선언되어야 한다.
1. 변수 (Variable)
2. 함수 (Function)
3. 클래스 (Class)
C언어에서의 규칙과 거의 동일하지만 이들을 이름 지을 때 다음의 규칙들을 준수해야 한다.
1. 영문자, 숫자, _ 만을 사용
2. 숫자로 시작할 수 없음
3. 중간에 여백(space)가 올 수 없음
4. 대소문자를 구분
5. Keyword는 이름으로 사용불가
6. 1024문자 까지 유효함
그리고 C++의 경우 프로그램 임의의 위치에서 변수를 선언하는 것이 가능하다. 즉, 프로그램의 중간에서 변수를 선언하여 사용하는 것이 가능함을 의미한다. 프로그램의 중간에서 선언된 변수는 해당 위치부터 해당 위치(local)이 종료되는 영역까지 영향을 미친다.
Data Types
프로그래밍 언어에서는 데이터가 메모리에 저장되는 형식을 구분하기 위해서 다양한 Data type을 갖는다. 그리고 C++는 다음과 같은 Data type을 지원한다.
1. int, char, float, double
2. wchar_t (16bit)
3. bool : true / false
wchar_t 의 경우 16비트 문자를 표현하는 데 사용하는 Data type으로서 C++에서 새롭게 추가된 자료형이다.
bool 의 경우 true / false 값을 표현하는 데 사용하는 Data type으로서 마찬가지로 C++에서 새롭게 추가된 자료형이다.
Type Modifier
기존의 선언에 특별한 의미를 부여하게 되는 keyword로서 C++에서 C언어에 비해 몇가지가 더 추가되었다.
1. unsigned / signed
2. long, short
3. long double : 80bits
long double의 경우 C++에서 새롭게 추가되었으며 매우 넓은 범위의 소수값 또는 매우 높은 정밀도를 가지는 소수를 표현할 때 사용한다.
상수 (Constants)
고정된 값을 의미하는 data를 표현할 때 사용하며 이를 변수와 구분하기 위한 목적으로 사용한다.
특히 앞에 L을 붙여서 문자를 표현하면 (ex. L'a')이는 wchar_t 형식을 표현할 수 있다.
Escape Sequences
String 상수 내에서 특수문자를 표현하고 싶은 경우 사용하게 되는 표현
Sequence | 내용 |
\n | New Line |
\t | tab |
\a | alert |
\\ | Back slash |
\' , \" | Single Quote, double quote |
\b | Back Space |
\? | Question Mark |
%% | % |
변수의 Scope 및 초기화
변수는 선언된 형태와 위치에 따라서 다음과 같이 구분함.
1. 지역변수 (Local Variable)
2. 전역변수 (Global Variable)
3. 매개변수 (formal parameter)
변수의 초기화
1. 초기화 = 선언시 값을 지정함으로써 최초 할당시 초기값을 설정하는 행위
2. 방법 : 선언부분에서 " = 값" 형식으로 지정
3. Function call시 formal parameter는 actual parameter의 값으로 초기화됨
Short circuit evaluation
어떤 tue/false를 판별하기 위한 문장이 다양한 문장으로 복합적으로 구성된 경우, 판별 과정에서 결과값이 확정되면 나머지 부분은 평가하지 않는 것
즉, 아래와 같이 작성된 코드의 조건문 부분에서 n1 > n2 부분이 False이기 때문에 뒤의 n3 < n4의 결과에 상관없이 해당 조건부 부분은 False가 된다. 그렇기 때문에 실제로는 n3 < n4에 대한 true/false 여부를 판별하지 않게 된다.
#include <iostream>
using namespace std;
int main()
{
int n1 = 3;
int n2 = 5;
int n3 = 7;
int n4 = 9;
if((n1 > n2) && (n3 < n4))
cout << "true" << endl;
else
cout << "false" << endl;
return 0;
}
Type conversion
1. 서로 다른 type 끼리의 data 연산인 경우 - 용량 or 유효숫자가 많은 쪽으로 변환하여 일치시킴
2. 서로 다른 type의 assignment 또는 parameter passing - 받는 쪽 type으로 변환
3. bool type은 integer로 자동 변환됨 (0, 1)
4. explicit type conversion - (type) expression 의 형식을 사용
5. space와 ()는 성능에 영향을 주지 않으므로 자유롭게 사용하되, 가독성을 극대화 하는 방향으로 사용
'Computer Science > 자료구조' 카테고리의 다른 글
2주차(4) - 데이터 구조를 공부하기 위한 C++의 Class의 기본개념 (0) | 2021.03.01 |
---|---|
2주차(3) - ADT (0) | 2021.03.01 |
2주차(2) - Stack(1) (0) | 2021.03.01 |
2주차(1) - 알고리즘의 성능분석 (0) | 2021.03.01 |
1주차(1) - 알고리즘과 데이터 구조 개요 (0) | 2021.02.24 |
댓글
이 글 공유하기
다른 글
-
2주차(3) - ADT
2주차(3) - ADT
2021.03.01 -
2주차(2) - Stack(1)
2주차(2) - Stack(1)
2021.03.01 -
2주차(1) - 알고리즘의 성능분석
2주차(1) - 알고리즘의 성능분석
2021.03.01 -
1주차(1) - 알고리즘과 데이터 구조 개요
1주차(1) - 알고리즘과 데이터 구조 개요
2021.02.24