본문 바로가기
반응형

프로그래밍 언어/C++27

[C++] constexpr 키워드 constexpr • 컴파일 시간에 결정되는 상수 값 • C++11 에서 도입된 문법 • 템플릿 인자로 사용 가능 • 상수식 계산, 배열 크기 정의 등 컴파일 시간에 최적화되는 코드 작성에 유용 const 키워드 비교 값 초기화 이후 변경할 수 없다는 것에서는 동일하다. #include void main() { const int x = 5; x = 3; // error constexpr int y = 6; y = 2; // error } Q) 그렇다면 어떤 차이가 있을까? 상수값은 컴파일, 실행 시점 등 정해지는 시기가 다를 수 있다. #include void main() { const int x = 5; int arr1[x]; // ok int temp = 3; const int y = temp; //.. 2024. 4. 1.
[C++] explicit 키워드 explicit 키워드는 묵시적 형변환을 할 수 없게 만들고 명시적인 형변환만 가능하도록 만드는 것이다. 주로 생성자에 explict를 활용한다. why? 의도하지 않은 오류를 방지하기 위함이다. = 원하지 않은 형변환 제한 #include using namespace std; class Task { public: Task(int n) : cnt(n) {}; int cnt; void printCount(){ cout 2023. 1. 20.
[C++] 네임스페이스(namespace) 활용 『 :: 』 기호는 Scope Operator로 "범위지정 연산자" 라고 한다. (네임스페이스 지정할 때 사용하는 연산자) #include namespace A { void Print() { printf("a...\n"); } } namespace B { void Print(); } int main() { A::Print(); B::Print(); } void B::Print() // 선언부와 정의부 구분 { printf("b...\n"); } 여러 사람이 작업을 하다보면 변수나 클래스명이 같을 수 있다. namespace로 영역을 구분할 수 있다. 동일한 영역에서 정의된 함수 호출할 때는 네임스페이스를 명시할 필요가 없다. 네임스페이스 중첩 #include namespace A { void Print(.. 2022. 8. 9.
[C++] 인라인(inline) 함수 키워드 「inline」 로 정의된 함수를 "인라인 함수"라 한다. 보통, 구조가 간단한 함수를 inline 처리해야 효율성을 높일 수 있다. inline void Add(int a, int b) { return a + b; } 클래스 또는 구조체 안에 멤버함수 정의부를 두면 자동 인라인 함수화한다. 소스코드를 .h와 .cpp로 분리하는 경우 컴파일시간에 인라인함수 코드가 확장될 수 있도록 함수 정의부는 헤더파일에 둔다. (함수가 호출될 때 읽히기 때문에 미리 읽도록 처리) A.h class A { int res; public: inline int add(int a, int b); void print(void); }; inline int A::add(int a, int b) { res = a + b; re.. 2022. 8. 6.
[C++] 디폴트 파라미터(default parameter) 디폴트 값이란 "기본적으로 설정되어 있는 값"을 의미한다. 함수 호출 시 파라미터(parameter)에 전달 될 아규먼트(argument)가 부족할 경우 대신해서 전달되는 값이기도 하다. ※ 아규먼트(argument, 인수) & 파라미터(parameter, 매개변수) void sub(int a, int b, int c) // parameter { … } sub(5); // too few argument 함수 원형을 별도로 선언하는 경우 매개변수 디폴트 값은 함수의 원형선언에만 위치시켜야 한다. 또한, 우측 파라미터부터 정의해야 한다. 전달되는 인자는 왼쪽에서부터 채워지고 부족분은 디폴트 값으로 채워진다. // 부분 정의도 가능 void sub(int a, int b = 10, int c = 20); //.. 2022. 8. 5.
💻 함수 오버로딩(Overloading) 함수 오버로딩 (overloading) • 동일한 이름의 함수명이 여러개 중복 정의되어 있는 형태 • 함수 파라미터(parameter) 자료형 혹은 개수가 다르다. • C 언어에서는 동일한 이름의 함수 정의를 허용하지 않는다. (컴파일 오류) 하지만 C++에서는 함수 중복 정의 허용 void sub(int n) { … } void sub(char* str) { … } void sub(void) { … } void sub(int n, char* str) { … } 오버로딩(중복 정의)이 안되는 경우 리턴 타입만 다른 경우 int sub(void) { … } void sub(void) { … } 디폴트 파라미터(default parameter) 활용 중복 정의는 되지만 모호한 호출 오류 발생 void sub.. 2022. 8. 3.
[C++] [STL] next_permutation 순열과 조합은 알고리즘 문제 풀면서 사용되는 개념으로 많이 사용된다. 문제 난이도에 따라 순열/조합 구현만 요구할 수 있지만 [경우의 수 + α] 를 요구하는 문제가 많은 편이다. 순열(Permutation)이란 서로 다른 n개의 원소에서 r개 선택해서 줄을 세우는 것이다. 「줄을 세우는 것」은 순서에 따라 각기 다른 경우로 취급 cf. 조합(Combination)은 순서가 다르더라도 동일한 경우로 처리 ex) 원소가 3개인 집합 {1, 2, 3}에서 2개 뽑는 경우의 수 • 순열: {1, 2} {2, 1} {2, 3} {3, 2} {1, 3} {3, 1} → 3P2 • 조합: {1, 2} {2, 3} {1, 3} → 3C2 📌 순열과 조합 순열과 조합 (백준 N과 M 시리즈) 순열과 조합 순열(Perm.. 2022. 1. 5.
[C++] sort() 함수란? 개발할 때나 코딩 테스트에서 많이 활용되는 정렬(Sort) 단순히 정렬된 원소를 요구하는 경우도 많지만 상황에 따라서는 정렬 기법을 응용해서 문제 접근해야 하는 경우도 많다. [C++] 에서도 이러한 정렬을 라이브러리로 제공해준다. 📌 [ps] 문자열 사전 오름차순 비교 및 정렬 📌 [ps] 여러 정수 기준에 따른 우선순위 비교 및 정렬 • 헤더파일 #include • 함수원형 void sort(T start, T end, Compare comp); • Default는 오름차순이지만 3번째 인자로 정렬 기준을 줄 수 있다. • sort(arr, arr+n); • sort(v.begin(), v.end()); • sort(v.begin(), v.end(), comp); // 사용자 정의 함수 • sort(.. 2022. 1. 1.
stable_sort()와 sort() 차이 알아보기 배열이나 vector 원소를 정렬하는데 있어서 자주 사용되는 sort() C++에는 stable_sort()라는 것도 있다. 📌 [C++] sort() 함수란? [C++] sort() 함수란? 개발할 때나 코딩 테스트에서 많이 활용되는 정렬(Sort) 단순히 정렬된 원소를 요구하는 경우도 많지만 상황에 따라서는 정렬 기법을 응용해서 문제 접근해야 하는 경우도 많다. [C++] 에서도 이러 zoosso.tistory.com 둘의 가장 큰 차이는 원소 순서를 보장 여부로 「안정성」이지 않을까 싶다. • sort() 기존 순서를 보장하지 않는다. • stable_sort() 기존 순서를 보장한다. ex) ID를 기준으로 비교 정렬하지만 동일한 ID인 경우 sort() 결과가 예상가 다르게 나올 수 있다. 예시.. 2022. 1. 1.
[C++] [STL] fill 함수 사용해보기 template void fill(ForwardIterator first, ForwardIterator last, const T& val); - first 채우고자 하는 iterator 시작위치 (first 포함된다.) - last: 채우고자 하는 iterator 끝위치 (last 포함되지 않는다.) - val: [first, last)까지 채우고자 하는 값 대입을 위해 operator= 연산자가 사용된다. * 헤더파일 #include 필요 예제 코드 fill은 보통 배열(array)나 벡터(vector)에 주로 이용합니다. 예제- - Array #include #include using namespace std; int main() { // 0 0 0 0 0 int arr[5] = {}; // 7 7 .. 2021. 9. 11.
반응형