728x90
주요 모던 C++ 문법
∙ 타입 추론 auto 키워드
- 변수 선언 시 타입 자리에 auto 키워드를 지정하면 컴파일 시간에 자동으로 타입을 추론하여 결정
- 복잡한 타입 또는 범용적인 코드 작성 시 유리
- const 또는 레퍼런스(&) 속성을 사용해 auto를 한정할 수 있음
auto a1 = 10; //int
auto a2 = 3.14; //float
auto a3 = "hello"; //const char*
auto a4 = "hello"s; //std::string
∙ 타입 정의 (using)
- C언어 또는 C++11 이전이라면 typedef를 사용하고, C++ 이후라면 using 사용을 권장
- using 문법이 읽기 더 쉽고, 템플릿 별칭도 지원함
∙ 범위 기반 for문
- 배열 또는 STL 컨테이너에 들어있는 모든 원소를 순차적으로 접근하는 C++11의 새로운 반복문
- 사용자 정의 타입에 대해 범위 기반 for문을 지원하려면 std::begin(), std::end() 함수를 지원해야 함
vector<int> numbers {10, 20, 30}
for (int n : numbers){
cout << n << endl;
}
∙ chrono 라이브러리
- OS 독립적으로 정밀한 시간 측정 가능, 나노초 단위까지 측정 가능
- 특정 연산 전후로 time_point를 측정하고, time_point 차이를 이용하여 실제 연산 시간을 계산
> 전체 타입을 모두 명시하여 코드를 작성하면 복잡하므로 auto사용 예제 코드를 참고
- 프로그램 동작 시간을 제대로 측정하려면 g++ 사용 시에는 -O2 옵션을 사용하고, Visual Studio 사용 시에는 Release 모드로 빌드해야 함
- <chrono>에 정의되어 있음
auto start = chrono::system_clock::now();
......
auto end = chrono::system_clock::now();
auto msec = chrono::duration<double>(end - start).count() * 1000;
cout << "time : " << msec << "ms" << endl;
∙ 프로그래머스 실습 (분수 사칙연산)
#include <string>
#include <vector>
using namespace std;
// 최대공약수 계산 함수
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
vector<int> solution(int numer1, int denom1, int numer2, int denom2) {
int denom = denom1 * denom2;
int number = numer1 * denom2 + numer2 * denom1;
// 분자와 분모의 최대공약수 계산
int divisor = gcd(number, denom);
// 분자와 분모를 최대공약수로 나누어주기
number /= divisor;
denom /= divisor;
vector<int> answer{number, denom};
return answer;
}