이 섹션에서는 C++의 가상 클래스에 대한 흥미로운 사실에 대해 논의합니다. 먼저 두 가지 경우를 보고 그 사실을 분석하겠습니다. 처음에는 가상 기능을 사용하지 않고 프로그램을 실행합니다. 비가상 기능에서 가상 기능을 사용하여 프로그램을 실행합니다. 예시 이해를 돕기 위해 다음 구현을 살펴보겠습니다. − #include <iostream> using namespace std; class BaseClass { public: void display(){ &nbs
이 섹션에서는 C++에서 파생 클래스 메서드의 액세스를 제한하는 흥미로운 사실에 대해 논의합니다. 몇 가지 예를 보고 출력을 분석하여 C++에서 파생 클래스 메서드를 사용할 때의 제한 사항에 대해 자세히 알아보겠습니다. 예시(C++) 이해를 돕기 위해 다음 구현을 살펴보겠습니다. − #include <iostream> using namespace std; class BaseClass { public: virtual void display(){ cout <
이 섹션에서는 C++ 프로그램이 컴파일될 때 변수와 개체가 메모리에 저장되는 위치에 대해 설명합니다. 우리가 알다시피, 객체가 저장될 수 있는 메모리의 두 부분이 있습니다 - 스택 - 메모리 블록 내부에 선언된 모든 멤버는 스택 섹션 내부에 저장됩니다. 주 함수도 함수이므로 그 안의 요소는 스택 내부에 저장됩니다. 힙 − 일부 객체가 동적으로 할당되면 힙 섹션에 저장됩니다. 블록이나 함수 내부에 선언된 객체의 범위는 객체가 생성된 블록으로 제한됩니다. 객체는 블록 내부에 생성될 때 스택에 저장되고 컨트롤이 블록이나
C++에 하나의 빈 클래스가 있다고 가정합니다. 이제 크기가 0인지 여부를 확인하겠습니다. 실제로, 표준은 크기가 0인 객체(또는 클래스)를 허용하지 않습니다. 이는 두 개의 개별 객체가 동일한 메모리 위치를 가질 수 있기 때문입니다. 이것이 빈 클래스라도 크기가 1 이상이어야 한다는 개념의 배경이 되는 이유입니다. 빈 클래스의 크기는 0이 아닌 것으로 알려져 있습니다. 일반적으로 1바이트입니다. 아래 예를 참조하십시오. 예시 이해를 돕기 위해 다음 구현을 살펴보겠습니다. − #include<iostream> using
이 문제에서 우리는 동적 메모리 할당을 통해서만 객체를 생성할 수 있고 직접적인 객체 생성은 허용되지 않는 하나의 클래스를 만드는 방법을 볼 것입니다. 아이디어는 간단합니다. 해당 클래스에 대한 private 소멸자를 생성해야 합니다. 소멸자가 private일 때 컴파일러는 동적 할당되지 않은 개체에 대해 컴파일러 오류를 생성합니다. 컴파일러는 사용할 수 없게 되면 스택 세그먼트에서 개체를 제거해야 하기 때문입니다. 동적으로 할당된 객체의 경우 프로그래머는 객체를 삭제할 책임이 있지만 컴파일러는 이에 대한 책임이 없으므로 객체를
이 섹션에서는 C++에서 STL이 반환하는 포인터를 사용하여 인덱스를 생성하는 방법을 볼 것입니다. 우리가 알고 있듯이 C++의 많은 내장 함수는 원하는 숫자의 주소를 제공하는 메모리의 위치에 대한 포인터를 반환하지만 반환된 값의 컨테이너에 있는 실제 인덱스와는 관련이 없습니다. 예를 들어, 코드의 최대 요소를 결정하기 위해 std::max_element() 함수를 사용합니다. 이것은 원하는 요소의 인덱스를 반환하지 않고 메모리의 주소를 반환합니다. 그러나 때로는 해당 주소에서 인덱스를 가져와야 합니다. 여기에서 인덱스를 생성하는
가우시안 필터링은 이미지 처리 분야에서 매우 유용합니다. 이미지의 노이즈를 줄이는 데 사용됩니다. 이 섹션에서는 2D 가우시안 커널을 생성하는 방법을 살펴보겠습니다. 2D 커널 생성을 위한 가우스 분포는 다음과 같습니다. $$G(x,y)=\frac{1}{2\Pi\:\sigma^{2}}e^{\frac{x^{2}+y^{2}}{2\sigma^ {2}}}$$ 예 이해를 돕기 위해 다음 구현을 살펴보겠습니다. − #include #include #include #define PI 3.1415 네임스페이스 std;void calc_filt
이 섹션에서는 C++ STL 함수를 사용하여 테스트 케이스를 생성하는 방법을 볼 것입니다. 때때로 어레이 프로그램에 대한 테스트 케이스를 생성하는 것은 매우 복잡하고 비효율적인 프로세스가 될 수 있습니다. C++는 테스트 케이스를 생성하는 두 가지 방법을 제공합니다. 이러한 방법은 다음과 같습니다 - create() 메소드 C++ 함수 std::algorithm::generate()는 gen에 대한 연속 호출에 의해 반환된 값을 처음에서 마지막 범위의 요소에 할당합니다. 첫 번째, last 및 gen의 세 가지 매개변수를 사용합니
이 섹션에서는 C++에서 STL의 복합 클래스를 사용하여 포인트 클래스를 사용하는 방법을 살펴봅니다. 그리고 그것들을 기하학과 관련된 문제에 적용하십시오. 복소수는 STL의 복합 클래스 내부에 있습니다(#include ) 포인트 클래스 정의 complex를 point로 만들기 위해 complex의 이름을 point로 변경한 다음 x를 복합 클래스의 real()로, y를 복합 클래스의 imag()로 변경합니다. 따라서 포인트 클래스를 시뮬레이션할 수 있습니다. # include <complex> typedef comple
여기에서 지도 컨테이너와 C++에서의 사용을 볼 수 있습니다. 맵은 해시 매핑 방식으로 요소를 저장하는 연관 컨테이너로 정의됩니다. 각 요소는 키 및 값과 연결됩니다. 매핑된 두 값은 동일한 키를 가질 수 없습니다. 다음은 C++의 지도 컨테이너 내부에 있는 몇 가지 기본적인 방법입니다. begin():맵의 첫 번째 요소에 대한 반복자를 반환합니다. 끝() − 맵의 마지막 요소 다음에 오는 이론적인 요소에 대한 반복자를 반환합니다. 크기() − 지도의 요소 수를 반환합니다. 최대 크기() − 맵이 보유할 수 있는 최대 요소
여기에서는 C++의 균일 초기화에 대해 설명합니다. 이것은 C++11 버전에서 지원됩니다. 균일 초기화는 기본 유형에서 집계에 이르는 변수 및 개체를 초기화하기 위해 일관된 구문을 사용할 수 있도록 하는 기능입니다. 즉, 중괄호({})를 적용하여 초기화 값을 묶는 중괄호 초기화를 도입합니다. 구문 type var_name{argument_1, argument_2, .... argument_n} 동적으로 할당된 배열 초기화 예시(C++) 이해를 돕기 위해 다음 구현을 살펴보겠습니다. − #include <bits/stdc++.
여기서 우리는 C++에서 사용자 정의 리터럴의 개념을 볼 것입니다. C++ 버전 11부터 사용자 정의 리터럴(UDL)이 C++에 추가되었습니다. C++는 또한 다양한 내장 유형에 대한 리터럴을 제공하지만 제한적입니다. 내장 리터럴 - 31(정수) 3.5(더블) 4.2F(플로트) p(문자) 31ULL(부호 없는 Long Long) 0xD0(부호 없는 16진수 정수) pq(문자열) 내장 리터럴 외에도 때때로 사용자 정의 리터럴이 필요합니다. 그 뒤에는 몇 가지 이유가 있습니다. 몇 가지 예를
행렬이 하나 있다고 가정하면 반복 접근 방식을 사용하여 이를 2차원 연결 목록으로 변환해야 합니다. 목록에는 오른쪽 및 아래쪽 포인터가 있습니다. 따라서 입력이 다음과 같으면 10 20 30 40 50 60 70 80 90 그러면 출력은 이 문제를 해결하기 위해 다음 단계를 따릅니다. − real_head :=NULL 크기가 m인 배열 head_arr을 정의합니다. initialize i :=0의 경우 i
행렬이 하나 있다고 가정하면 재귀 접근 방식을 사용하여 이를 2차원 연결 목록으로 변환해야 합니다. 목록에는 오른쪽 및 아래쪽 포인터가 있습니다. 따라서 입력이 다음과 같으면 10 20 30 40 50 60 70 80 90 그러면 출력은 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 함수 make_2d_list()를 정의하면 행렬 mat, i, j, m, n,가 사용됩니다. i와 j가 행렬 경계에 없으면 - null 반환 temp :=값이 mat[i, j]인 새 노드 생성 tem
균형 이진 탐색 트리와 목표 합이 있다고 가정하고 합이 목표 합과 같은 쌍인지 여부를 확인하는 방법을 정의해야 합니다. 이 경우. 이진 검색 트리는 변경할 수 없음을 명심해야 합니다. 따라서 입력이 다음과 같으면 그러면 출력은 (9 + 26 =35)가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 스택 s1, s2 정의 완료1 :=거짓, 완료2 :=거짓 val1 :=0, val2 :=0 curr1 :=루트, curr2 :=루트 무한 루프, do - done1이 거짓일 때 − curr1이 NULL과 같지 않
요소 집합이 있다고 가정합니다. 우리는 이러한 요소의 어떤 순열이 병합 정렬의 최악의 경우를 초래하는지 찾아야 합니까? 점근적으로 알고 있듯이 병합 정렬은 항상 O(n log n) 시간을 소비하지만 어떤 경우에는 더 많은 비교가 필요하고 더 많은 시간을 소비합니다. 여기에서 일반적인 병합 정렬 알고리즘을 구현하여 정렬할 때 더 많은 비교가 필요한 입력 요소의 순열을 찾아야 합니다. 따라서 입력이 [11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26] 과 같으면 출력은 [11,19 ,15,23,13
0과 N-1 범위에 있는 요소가 있는 N개의 숫자 배열이 제공됩니다. 요소가 정렬되지 않습니다. 목표는 개별적으로 정렬할 수 있는 배열의 최대 파티션 수를 찾은 다음 연결하여 길이가 N인 전체 정렬된 배열을 만드는 것입니다. 각 파티션은 그 안의 요소가 정렬되지 않도록 선택됩니다. 0과 N-1 사이의 N 숫자의 경우 정렬된 요소는 값과 동일한 인덱스에 있습니다. Arr[i] =i. 각 요소를 왼쪽에서 지금까지 찾은 최대값과 비교하여 이 문제를 해결할 것입니다. 최대값의 올바른 위치에 도달하면 (최대값 ==i ). 왼쪽에 있는 모
5개의 정수가 주어집니다. N, A, B, X 및 Y . 목표는 다음과 같은 경우 [ 1 ~ N ] 범위의 숫자 사이를 확인하여 이익을 최대화하는 것입니다. 숫자를 A로 나누면 이익이 X 증가합니다. . 숫자를 B로 나눌 때 이익이 Y 증가합니다. . 이익은 범위 내의 특정 숫자에 대해 한 번만 추가할 수 있습니다. 예를 들어 이해합시다. 입력 - N=4, A=2, B=3, X=2, Y=3 출력 − 최대 이익은 − 7입니다. 설명 - 2,4는 A(2)로 나눌 수 있습니다. 이익이 0에서 2로 증가하고 2에
숫자 배열이 제공됩니다. 목표는 해당 배열에서 소수의 개수를 찾는 것입니다. 소수는 1과 숫자 자체로 나누어 떨어지는 수입니다. 그것은 단지 두 가지 요소를 가지고 있습니다. 첫 번째 요소부터 마지막 요소까지 숫자가 소수인지 확인하고 지금까지 찾은 소수의 개수를 늘립니다. 숫자 N이 소수인지 확인하려면 [2 ~ N/2] 범위 사이의 숫자가 N을 완전히 나누는지 확인합니다. 그렇다면 소수가 아닙니다. 그렇지 않으면 프라임입니다. 예를 들어 이해합시다. 입력 - arr[]={ 1,2,3,4,5,6,7,8,9 } 출력 − 소
=1이고 R<=N인 R L과 R 범위에 있는 요소를 탐색하고 가장 작은 요소를 찾아 이를 수행합니다. 다시, 범위 L 및 R의 요소를 순회하고 1단계에서 계산된 가장 작은 요소와 동일한 요소가 있으면 카운트를 증가시킵니다. 예를 들어 이해합시다. 입력 - arr[]={ 1,2,3,0,3,2,0,1 }, N=8, L=2, R=5 출력 − 범위에서 가장 작은 수 − 1 설명 - 범위 L(1) ~ R(5)의 요소는 arr[1] ~ arr[4]입니다. { 2,3,0,3 }. 가장 작은 값은 0입니다. 0의 개수는 1