C++(56)
-
이진탐색(binary search)
정렬된 배열의 탐색에서 사용한다. 배열의 중앙아 있는 값을 조사하여 찾고자하는 값이 중앙값보다 큰지 작은지를 판단한다. 만약 크다면 찾고자하는 값은 중앙값보다 오른쪽에 있는 것이고, 작다면 중앙값보다 왼쪽에 있는 것이다. 예를 들어 배열{1,2,3,4,5} 가 있을 때, 찾고자하는 값이 2라면 중앙값 3보다 작으므로 왼쪽에 있다. 이렇게 탐색의 범위를 반으로 줄일수 잇고, 이러한 방법에 의해 매 단계에서 검색해야할 리스트의 크기를 반으로 줄인다. 다음은 이진탐색이 성공한 경우이다. 만약 다음과 같이 배열안에 찾고자하는 원소가 존재하지 않는다면 탐색은 실패한다. 아래는 이진탐색을 C++로 구현한 예이다. #include using namespace std; #define ARRAY_SIZE 10 int m..
2022.04.19 -
버블 정렬(bubble sort)
버블 정렬 (bubble sort) 버블 정렬은 인접한 2개의 레코드를 비교하여 크기가 순서대로 되어 있지 않으면 서로 교환하는 비교-교환 과정을 리스트 왼쪽 끝에서 시작하여 오른쪽 끝까지 진행한다. 이러한 리스트의 비료-교환 과정이 한번 완료되면 가장 큰 레코드가 리스트의 오른쪽 끝으로 이동된다. 아래의 그림은 (22,37,15,19,12) 버블 정렬로 정렬한 것이다. 아래는 위의 그림을 코드로 구현한 것이다. #include using namespace std; #define ARRAY_SIZE 5 int main(void) { int array[ARRAY_SIZE] = {22,37,15,19,12}; for(int j = 0; j
2022.04.19 -
스택(stack)-1
스택(stack) 후입선출(LIFO: Last-In First-Out)한다. 다음처럼 스택에 A,B,C를 순서대로 입력했다가 하나를 삭제하면 맨 위에 놓여진 C가 삭제되고 다시 삽입하면 맨 위에 D가 놓여진다. 스택의 구조 스택에서의 입출력은 맨 위에서만 일어나고 스택의 중간에서는 데이터를 추가하거나 삭제할 수 없다. 스택의 구조는 다음과 같다. 스택에서 입출력이 이루어지는 부분을 top이라고 하고 바닥부분을 bottom이라고 한다. 스택에 저장되는 것을 element라 하고 element가 하나도 없는 스택을 empty라고 한다. 2022.04.22 - [C++/자료구조] - 스택(stack) - 2
2022.04.18 -
깊은 복사 / 얕은 복사
얕은 복사 #include using namespace std; int main(void) { int *a = new int(5); //int 만큼의 공간을 힙 영역에 할당하여 5라는 값을 집어 넣고, 주솟값을 a에 넣는다. int *b = new int(3); a=b; //런타임에러 발생 delete a; delete b; return 0; } 위의 코드는 런타임 에러를 발생시킨다. (물론 컴파일러의 종류, 설정 및 환경에 따라 아무런 문제도 일으키지 않을 수 있다.) 이유는 다음의 그림과 같다. 우리는 a = b 의 연산을 할 때 b의 값을 a의 값에 복사를 하는 값의 복사를 원했을 것이다. 하지만 a = b 연산을 하면 b의 주솟값이 a에 복사된다. 그렇게 되면 a가 원래 참조하고 있던 영역엔 더이..
2022.04.18 -
explicit
explicit explicit을 사용하면 더 이상 묵시적 변환이 발생하지 않아 대입연산자를 이용한 객체의 생성 및 초기화가 불가능하다. class SoSimple { private: int num1; int num2; public: SoSimple(int n1, int n2) : num1(n1),num2(n2) { } explicit SoSimple(SoSimple ©): num1(copy.num1), num2(copy.num2) { } void ShowSimepleDate() { cout
2022.04.18 -
copy constructor
C++ 스타일의 초기화 C++에서는 다음과 같은 방식으로 선언 및 초기화가 가능하다. 변수와 참조자. //변수, 참조자 초기화 //1.변수, 참조자 초기화 int num(20); // 메모리에 int만큼의 공간을 할당하고 그 안에 20을 넣는다. int &ref(num); // num이라는 공간에 ref라는 새로운 별명을 지어준다. //2.대입연산자를 이용 int num = 20; int &ref = num; 객체 초기화 #include using namespace std; class SoSimple { private: int num1; int num2; public: SoSimple(int n1, int n2) : num1(n1),num2(n2) { } void ShowSimepleDate() { cout
2022.04.16