반응형

프로그래밍 215

자료구조 -트리(Tree) C언어

트리의 특징 2차원적 구조를 가짐. 이에 반해 자료구조 배열, 연결리스트, 스택, 큐...등은 1차원 선형적 구조를 갖음. 2014/02/28 - [프로그래밍/C언어] - 동적배열 자료구조의 시작 2014/03/20 - [프로그래밍/C언어] - 자료구조 - 연결리스트[linked list] C언어 2014/03/21 - [프로그래밍/C언어] - 자료구조 스택(stack) C언어 2014/03/22 - [프로그래밍/C언어] - 자료구조 큐(Queue) C언어 용어정리 차수 - 자식 노드의 개수 잎 - 자식 노드가 0인 노드 서브트리(sub Tree) - 트리 내부의 작은 트리 포리스트(Forest) - 트리가 여러 개 모인 것. 레벨(level) - 루트에서 그 노드까지의 거리를 말함.(루트레벨 :1) 높..

부모클래스의 멤버변수 초기화

자식 클래스에서 부모의 멤버변수를 초기화하여 사용하고 싶을 경우는 멤버 초기화리스트(멤버이니셜라이져)의 사용이 필수다. 초기화하는 방법에 앞서, 상속에 관한 이해가 필요하다. 클래스는 그 클래스의 속성을 표현하는 데이터들의 집합이다. 함수는 그 데이타에 대한 작업을 하는 도구다. 클래스의 객체를 생성하여 객체가 차지하는 메모리 공간의 크기를 재보면 멤버변수의 사이즈의 합과 같다. 함수가 얼마나 많든지 간에 객체의 크기는 멤버변수만의 총 사이즈다. 2015/04/28 - [프로그래밍/c++] - [C++]멤버이니셜라이져(멤버초기화리스트) 다음은 부모클래스와 상속관계에 있는 클래스의 객체를 생성하여 그 크기를 출력하는 코드다. 너무 당연한 결과다. circle의 멤버변수는 int형 num 하나로 4byte,..

프로그래밍/cpp 2015.04.29

[C++]멤버이니셜라이져(멤버초기화리스트)

멤버 초기화 리스트(Mmber Initialization List)라고한다. 생성자의 역할인 멤버변수의 초기화를 대신할 수 있다. 보통 멤버 이니셜라이져라고 부르는데 꼭 사용해야 하는 경우는 4가지가 있다. 1. 상수 멤버의 초기화 (C++11의 경우는 상수멤버변수 선언과 동시에 그냥 초기할 수 있음.) 2. 레퍼런스 멤버 초기화 3. 객체멤버의 초기화 4. 부모클래스의 멤버변수초기화 1, 2, 3번은 비슷한 맥락에서 이해될 수 있다. 4번의 경우는 상속과 객체생성 메커니즘에 대해 잘 이해해야 이해할 수 있다. 2015/04/29 - [프로그래밍/c++] - 부모클래스의 멤버변수 초기화 멤버이니셜라이져 문법 아래는 일반적인 멤버 초기화 방법이다. 아래는 멤버 이니셜라이저 문법을 사용하였다. 두 경우 결과..

프로그래밍/cpp 2015.04.28

[C++11]바인더, std::bind, std::function, std::spaceholder::_1, bind1st, bind2st

바인더는 STL 함수 어댑터다. std::bind는 C++11에서 표준으로 제공하는 바인더로 기존의 bind1st, bind2st 보다 다양한 활용을 할 수 있는 어댑터다. 기존의 bind1st, bind2st는 두 개의 파라미터를 갖는 객체함수의 파라미터를 고정시켜 주는데, bind1st는 첫 번째 파라미터를 bind2st는 두 번째 파라미터에 고정값을 준다. 일반적으로 bind1st와 bind2st는 STL 이항 함수자(함수객체)를 단항으로 바꾸는데 쓰인다. 다시말해 들어 비교를 하는 STL 함수 객체(함수자) equal_to, not_equal_to, less, greater,.....등을 단항함수로 만든다. 위 코드를 분석해보자. bind1st는 이항함수자를 단항함수자로 만들어 반환한다. bind..

프로그래밍/cpp 2015.04.25

[c언어] 홀수 마방진 풀이법(알고리즘)

마방진의 풀이 여러가지가 있다. 대표적인 풀이방법은 홀수차와 짝수차에 따라 다르고 짝수차는 4의 배수와 아닌 수에 따라 달라진다. 예를들어 3차 마방진은 3x3의 정방행렬형태다. 가장 간단한 형태는 홀수 마방진이고, 짝수차 중 4의 배수가 아닌 마방진 형태가 가장 복잡하다. 여기서는 간단히 홀수 마방진을 푸는 방법과 알고리즘을 c언어로 작성해 보겠다. 마방진의 정의 우리에게 친숙한 김홍도의 작품 씨름이다. 이 그림에는 마방진의 원리가 숨어있다. x자 마방진이라고 하는 이 마방진은 대각선에 늘어선 사람의 합이 12명이 된다. 우리가 흔히 말하는 마방진은 규격은 다음과 같다. N차 마방진의 경우 1부터 NxN까지의 자연수를 NxN칸에 나열 했을 경우 가로와 세로 대각선의 어느 방향으로도 수의 합이 같아야 한..

메모리 구조,c언어를 이해하기 위한(텍스트,데이타,bss,힙,스택)

C언어를 잘하고 싶다면 메모리 구조에 대한 이해는 꼭 필요합니다. 물론 다른 언어도 마찬가지지만 메모리에 대한 조작이 비교적 많은 C언어는 메모리 구조는 바로 언어에 대한 이해도를 높여줍니다. C언어로 짠 프로그램이 메모리에 어떻게 로드 되는지 알아보겠습니다. 다음 코드는 주의 깊게 안보셔도 됩니다. 완전 쓸데없는 노가다입니다. 흑 ㅠ 코드를 분석할 필요는 없고, 결과를 보려고 만든 코드니 결과만 알면 됩니다. 변수들의 선언 방식과 위치에 따라서 주소값이 어떤 규칙성이 보일 듯 하죠? 4로 시작하는 주소가 많고, 2,6으로 시작하는 주소도 보이네요. 대충 3개 정도로 나뉘어 보입니다. 실제로는 5개의 영역입니다. 일반적으로 텍스트 영역이 낮은 주소-> 스택영역으로 갈수록 높은주소, 스택을 제외한 나머지 ..

[c++] 스마트 포인터 (auto_ptr) 에 대한 이해

이번 포스팅은 스마트 포인터(auto_ptr)에 대해서 알아보겠습니다. C++11에선 (스마트 포인터)shared_ptr이 표준에 추가되었다. 이는 참조 카운팅을 추가하여 스마트 포인터간의 매끄러운 대입을 가능하게 하였다. 스마트포인터의 종류에 대한 설명은 다음 포스팅으로 미루고 여기에선 스마트포인터의 원리에 관해서 원론적인 이야기를 할까 한다. 내용에 들어가기 앞서 스마트 포인터에 관한 이해를 위해서는 다음과 같은 주제에 대한 이해가 필히 요구된다. 템플릿, 연산자 오버로딩, 정적할당, 동적할당, 스택, 힙, 생성자,파괴자... 2014/06/16 - [프로그래밍/c++] - C++ 템플릿, 함수템플릿에 대한 이해 2014/06/17 - [프로그래밍/c++] - 클래스 템플릿에 대한 이해 C++ 201..

프로그래밍/cpp 2015.04.14

const 키워드에 대한 이해(c++)

const의 기본적 내용은 아래 글을 참조하시기 바랍니다. 2014/01/14 - [프로그래밍/C언어] - 상수포인터, 포인터상수, const c언어에서의 const를 확장하여 c++의 클래스 내부에서 사용되어지는 예를 살펴보겠습니다. 예1) 멤버변수를 const로 선언한 경우 위 코드를 컴파일해보면 두 개의 에러가 생긴다. 첫 번째는 초기화 되지 않은 멤버 Mango::m라고 하고, 두 번째는 Mango::m의 값이 읽기전용이기 때문에 값을 넣을 수 없다는 에러다. 초기화를 시켜야 하지만 생성자에서 초기화를 할 수 없다고 유추해 볼 수 있다. const멤버의 초기화 이 방법은 멤버 이니셜 라이져를 이용한 전통적인 방법이다. c++11에서는 다음과 같은 방법도 제공한다. 다음 방법은 c++11에서만 가능..

프로그래밍/cpp 2015.04.07

퀵정렬 알고리즘(Quick sort)

퀵정렬(Quick Sort) - 찰스 앤터니 리처드 호어(1934~)에 의해서 고안된 정렬로 매우 빠른 정렬입니다. 퀵정렬의 이해는 재귀와 분할정복(divide and conquer)에 대한 이해를 기초로 합니다. 분할정복은 재귀를 푸는 방식인데, 큰 덩어리의 문제를 작은 덩어리로 나누어 해결하는 방식입니다. 작은 덩어리로 나눌 때는 큰 덩어리와 작은 덩어리가 구조적으로 같아야 합니다. 2014/02/26 - [알고리즘] - 하노이탑 재귀호출 알고리즘 본론에 앞서 워밍업을 해봅시다. 위 영상은 퀵정렬의 키가 되는 아이디어를 보여주지만, 너무 자세히 보진 마시기 바랍니다. 제가 설명하는 방법과는 약간의 차이가 있기 때문입니다. 위 방법으로 가능하겠지만, 비효율적인 듯 보여지네요.. 아무튼.,,위 영상에서 ..

삽입정렬 알고리즘(insertion sort)

삽입정렬(insertion sort) - 삽입정렬 알고리즘을 설명하기 전 자료를 정렬된 목록과 정렬되지 않은 목록으로 자료를 나눌 필요가 있습니다. 삽입정렬은 배열의 경우 처음 첫 번째 요소를 정렬된 목록으로 간주한 후 루프를 시작합니다. 정렬되지 않은 목록의 제일 첫 번째 요소부터 정렬된 목록과 비교하여 적절한? 위치에 삽입해 나갑니다. 정렬되지 않은 목록 끝까지 위 작업을 반복하면 모든 요소가 정렬된 부분으로 바뀌게 됩니다. 삽입정렬 알고리즘의 아이디어도 어렵지는 않지만 삽입되는 과정을 차근차근 분석할 필요가 있습니다. 위 영상은 이해는 되지만 위 영상만 보고 코드로 작성하려면 먼가 부족하거나 헷갈릴 수가 있습니다. 삽입정렬에 대한 아이디어는 알려주지만, 알고리즘의 세세한 부분이 정확하지 않다는 것을..

반응형