분류 전체보기 441

[자료구조] Generic 프로그래밍과 C++ Template

Function Template두 값을 비교하여 -1, 0, 혹은 1을 반환하는 함수가 필요하다고 가정단, 정수, 실수, string 등의 서로 다른 타입에 대해서 이런 일을 하는 함수가 필요그렇다면 각 타입에 대해 별개의 함수를 만들어야 함이 세 함수들은 완벽하게 동일한 로직이지만 데이터의 타입이 다르므로 별개로 구성해야 함int compare(string &v1, string &v2) {if (v1  Function Template함수 탬플럿은 하나 혹은 그 이상의 타입명을 매개변수로 하여 작성된 함수를 말합니다.매개변수 타입은 실제로 이 함수를 호출할 때 결정되고그때 컴파일러에 의해 실제 함수가 생성됩니다.template int compare(T &v1, T &v2){ if (v1   Bubble ..

[자료구조] 클래스

C++ 클래스와 추상 데이터 타입클래스는 사용자 정의 데이터 유형으로, 데이터 멤버와멤버 함수를 가집니다. 데이터 멤버는 데이터를 저장하는 필드이고, 멤버 함수는 이러한 변수를 조작하는 함수입니다.  class Person{public: string name; int age; void print() { cout name = "Bob"; ptr_person->age = 24; ptr_person->print(); return 0;}c언어의 struct와 class는 데이터 멤버의 포함이었지만 c++은 멤버 함수 또한 포함할 수 있습니다.  클래스가 멤버 함수를 가지고 있고 이 멤버 함수또한 데이터처럼 호출을 할 수 있습니다.  그리고 Person 객체를 동적 생성하고 객체의 주소를 저장하는 포인터 변수이..

[자료구조] 스택의 구현

스택 구현 방법 - 배열스택은 리스트 이기에 배열로 구성하는 방법입니다. char mystack[MAX_CAPACITY]; // 스택에 저장되는 데이터의 타입을 문자(char)라고 가정하자.int top_pos = -1;bool full() { return top_pos == MAX_CAPACITY - 1;}bool empty() { return top_pos == -1;}void push(char c) { if (full()) throw runtime_error("stack_full"); mystack[++top_pos] = c;}void pop() { if (empty()) throw runtime_error("stack_empty"); t..

자료구조 4장 스택(STACK)

스택이란?스택이란 일종의 리스트단, 데이터의 삽입과 삭제가 한쪽 끝에서만 이루어짐LIFO(Last-In, First-Out)삽입/삭제가 일어나는 쪽을 스택의 top이라고 부름스택이 지원하는 연산push : 스택에 새로운 원소를 삽입pop : 스택의 top에 있는 원소를 스택에서 제거top 혹은 peek : 스택 top의 원소를 제거하지 않고 반환empty : 스택이 비어있는지 검사size : 저장된 원소의 개수를 반환스택 응용 예 : 괄호 검사 문제입력 수식의 괄호가 올바른지 검사 예) [a + b * {c / ( d - e ) } ] + ( d / e )  단순히 여는 괄호와 닫는 괄호의 개수 비교 만으로는 부족해 스택을 이용해서 검사합니다.여는 괄호는 스택에 push닫는 괄호는 스택 top과 같은 유..

[오픈소스소프트웨어] chap 10-2 여러파일 구성

여러 파일로 구성된 프로그램 빌드하기$gcc -o calc calc.c eval.c stack.c token-c -lm일일이 타이핑하기 귀찮음과 매번 모든 소스 파일을 새로 컴파일해야 합니다. 이를 위한 대안으로 shell script를 이용하는 것입니다.$cat mybuildscriptgcc -o calc calc.c eval.c stack.c token.c -lm$./mybuildscript문제점하나의 파일만 수정한 경우에도 매번 모든 소스파일을 다시 컴파일규모가 큰 프로젝트의 경우 엄청난 시간 낭비새로 컴파일 할 필요가 이쓴 소스 파일만 자동으로 찾아서 컴파일해주는 기능이 필요make와 Makefile의존성 : 프로그램 빌드에는 순서가 있음가령 foo.c 파일이 bar.h 파일을 include 한다..

[오픈소스 소프트웨어] 10-2 프로그램 개발

다수의 소스 파일로 구성된 프로그램 개발c프로그램은 여러 개의 소스 파일로 구성됩니다. 관습적으로 각각의 소스 파일은 확장자.C를 가집니다. 하나의 소스파일은 main이라는 함수를 가져야 하며, 거기가 프로그램 실행의 하나지점입니다. 프로그램을 여러 개의 소스 파일로 분할할 경우 장점서로 연관된 함수들과 변수들이 하나의 파일에 있음으로써 프로그램의 구조가 좀 더 알기 쉽고 명료해진다.각각의 소스 파일들을 개별적으로 컴파일 할 수 있다.소프트웨어 재사용에 유리하다. 압출풀기  이러면 소스파일을 컴파일해서 실행파일을 만들어줍니다. 후위 연산식posftfix로 바뀌어진 다음에는 어떻게 계산하느냐입력 수식에서 연산자 혹은 피연산자를 한번에 하나씩 읽습니다.피연산자는 스택에 push합니다.연산자가 들어오면 스택으..

[오픈소스소프트웨어] chap10.1 C, C++ 개발

이건 Object 파일까지만 만드는 것입니다.  디버깅GNU 개발에서 공직적인 디버거는 gdb입니다..  컴파일 할 때 -g 옵션을 추가합니다.gcc -o test test.c -g 그런 다음 gdb 디버거를 실행합니다.gdb test gdbgdb는 텍스트 기반입니다. 쉘과 유사한 command-liune 인터페이스를 제공합니다. 명령어break : 브레이크 포인트 설정print: 변수 값 프린트c : 다음 브레이크 포인트까지 계속 실행next(n) : 한 줄 실행step (s) : 한 줄 실행(funcion 안쪽으로)backtrace (bt) : 함수 호출 스택 디스플레이run / start : 프로그램을 실행, start는 디버깅 실행 1부터 10까지 숫자를 한 라인씩 화면에 출력하는 count10...

[오픈소스소프트웨어] chap10.1 C, C++ 개발

소프트웨어 빌드소스 코드 파일로부터 실행가능한 프로그램 또는 라이브러리를 만들어가는 과정HELLO.C (Source file)compilehello.o (object file)Linkhello (executable File)리눅스에서 C/C++ 언어를 이용한 프로그램 개발에는 make 또는 autotools가 가장 널리 사용됩니다. JAVA의 경우 ant, gradle, maven이 주로 사용됨 IDE (Integrated Development Environment)IDE는 Build 기능을 겸하기도 하지만 주로 코드 개발에 초점을 맞춥니다. (코드 작성, 컴파일, 링크, 디버깅 등) 리눅스용  C / C++ IDE들KDevelop : 간단한 구성, 대규모 프로젝트에 적합Eclipse : 환경 구성이 복..

[오픈소스소프트웨어] chap 9.5 파일 속성 검사

복합조건  [...]내부 내에서 조건의 결합(not, and or)1. !expr : 부정, 즉 expr이 참이면 거짓, 거짓이면 참 file info의 스크립트 정수에 대한 조건 검사-lt : 작은(less than)-le : 작거나 같은 (less or equal)-eq : 같은 (equal)-ge : 크거나 같은(greater or equal)-gt : 큰(greater than)-ne : 같지 않은(not equal) 는 문자열의 lexicographic(사전식) 순서를 비교하는 연산이며 이는 정수의 크기 비교와 다릅니다.예를들어 6은 57보다 사전식 순서 비교에서 큽니다. for문  for var [in list]do $var를 사용하는 스크립트 코드done여기서 list는 문자열의 열(list..