반응형

C++ 177

[자료구조와 STL] 12. find , find_if 만들어보기

2. 5 find , find_if 만들어보기 STL의 algorithm에서는 일반적으로 사용할 수 있는 다양한 함수들을 제공하고 있습니다. 이 중에 여기에서는 find와 find_if를 만들어 봅시다. find에서는 특정 구간 사이에 호출자가 원하는 자료가 보관된 위치를 찾는 함수입니다. 즉, 첫 번째 입력 인자와 두 번째 입력 인자는 보관된 위치가 될 수 있고 세 번째 인자가 보관된 형식과 같습니다. 또한, 컬렉션 종류에 상관없이 사용할 수 있게 만들기 위해 템플릿 형태로 만들기로 합시다. 반환 형식은 세 번째 인자와 같은 값이 보관된 위치를 반환하는 것이기 때문에 앞의 두 인자와 형식이 같겠지요. 구현은 단순히 차례대로 비교하여 같은 값이 보관된 위치를 반환하면 될 것입니다. #pragma once..

[자료구조와 STL] 10. vector 만들기

2. 4 vector 만들기 먼저, 앞에서 만든 프로젝트에 EHVector.h를 추가하여 STL에서 제공되는 vector와 비슷하게 직접 만들어 보기로 합시다. 이를 만드는 목적은 vector 내부를 좀 더 명확하게 이해하기 위해서입니다. EHVecotr.h에는 템플릿 클래스인 vector를 정의할 것입니다. 여기서는 EHLIB 이름 공간 내에 정의할게요. #pragma oncenamespace EHLIB{ template class vector{ };}; 이제 StuManager.h에 vector 대신 "EHVector.h"를 포함하는 구문으로 변경하고 std 이름 공간에 있는 vector 대신 EHLIB 이름 공간에 있는 vector를 사용하도록 바꾸세요. #include "EHVector.h"usi..

[자료구조와 STL] 9.vector를 이용하여 특정 키 순으로 보관하기 예제 코드

vector를 이용하여 특정 키 순으로 보관하기 예제 코드 //EHGlobal.cpp #include "ehglobal.h" void ehglobal::clrscr()//화면을 지우는 메서드 { system("cls"); } void ehglobal::timeflow(int millisecond) //원하는 시간동안 지연시키는 메서드 { Sleep(millisecond); } int ehglobal::getnum()//정수를 입력받는 메서드 { int num; char buf[255+1]; cin.getline(buf,255); //버퍼에 입력받음 cin.clear();//cin 내부 버퍼를 지움 sscanf(buf,"%d",&num); //포맷에 맞게 버퍼에 내용을 정수로 변환 return num; }..

[자료구조와 STL] 8. 3 vector를 이용하여 특정 키 순으로 보관하기

2. 3 vector를 이용하여 특정 키 순으로 보관하기 이번에는 vector를 이용하여 특정 키순으로 보관하는 방법에 대해 살펴보기로 합시다. 삭제나 검색, 전체 보기 등은 차례대로 보관할 때와 같습니다. 단지 보관할 위치를 찾는 논리가 다를 뿐입니다. 특정 키순으로 보관하려면 보관된 시작 위치부터 사용자가 입력한 학생 번호가 더 크거나 같은 위치를 찾아서 해당 위치에 보관해야 할 것입니다. 물론, 같으면 필터링해야겠지요. 이 경우에도 함수 개체만 잘 정의하면 쉽게 사용할 수 있습니다. vector에서 원하는 위치에 보관할 때는 insert 메서드를 사용합니다. insert 메서드를 사용할 때에는 보관할 위치에 해당하는 iterator를 입력 인자로 전달해야 합니다. 그리고 vector 내부에서는 해당..

[자료구조와 STL] 7.vector에 자료를 차례대로 보관하기 예제 코드

vector에 자료를 차례대로 보관하기 예제 코드 //EHGlobal.cpp #include "ehglobal.h" void ehglobal::clrscr()//화면을 지우는 메서드 { system("cls"); } void ehglobal::timeflow(int millisecond) //원하는 시간동안 지연시키는 메서드 { Sleep(millisecond); } int ehglobal::getnum()//정수를 입력받는 메서드 { int num; char buf[255+1]; cin.getline(buf,255); //버퍼에 입력받음 cin.clear();//cin 내부 버퍼를 지움 sscanf(buf,"%d",&num); //포맷에 맞게 버퍼에 내용을 정수로 변환 return num; } stri..

[자료구조와 STL] 5. vector 인데스 연산으로 사용하기 예제 코드

vector 인데스 연산으로 사용하기 예제 코드 //EHGlobal.cpp #include "ehglobal.h" void ehglobal::clrscr()//화면을 지우는 메서드 { system("cls"); } void ehglobal::timeflow(int millisecond) //원하는 시간동안 지연시키는 메서드 { Sleep(millisecond); } int ehglobal::getnum()//정수를 입력받는 메서드 { int num; char buf[255+1]; cin.getline(buf,255); //버퍼에 입력받음 cin.clear();//cin 내부 버퍼를 지움 sscanf(buf,"%d",&num); //포맷에 맞게 버퍼에 내용을 정수로 변환 return num; } strin..

[자료구조와 STL] 4. vector 인덱스 연산을 통해 사용하기

2. 1 인덱스 연산을 통해 사용하기 vector에서 인덱스 연산을 사용하면 보관된 요소의 개수에 상관없이 인덱스 연산 한 번으로 원하는 요소에 접근할 수 있습니다. 이러한 장점을 사용하기 위해서는 보관할 요소의 특정 키를 특정 알고리즘을 통해 보관하거나 보관된 위치를 구할 수 있어야 할 것입니다. 보관할 요소의 특정 키를 특정 알고리즘을 통해 보관하거나 보관된 인덱스를 구할 수 있으면 vector를 인덱스 연산을 통해 사용하면 효과적입니다. 그리고 특정 키를 입력 인자로 받았을 때 알고리즘을 통해 얻어온 인덱스의 최대값이 결정될 수 있으면 보다 효과적입니다. 인덱스 연산을 통해 vector를 사용하면 vector 생성 시에 저장소의 크기를 최대값으로 하고 모든 원소를 초기값으로 설정해야 합니다. 사실 ..

[C++] 전역 템플릿 함수

9.1 템플릿이란? 템플릿은 '틀'이라는 사전적 의미를 지니고 있습니다. C++언어의 템플릿 문법은 가상의 코드를 정의하면 컴파일러가 이를 사용하는 부분을 컴파일하면서 구체화한 코드를 생성하는 틀을 말합니다. 즉, 템플릿으로 정의한 코드는 가상의 코드이며 실제 구체화한 코드는 컴파일 시에 컴파일 전개로 생성됩니다. 이러한 이유로 템플릿 코드는 헤더에 작성하는 것이 일반적입니다. 템플릿으로 가상의 코드를 정의하면 대부분 사용할 인자의 형식은 다르지만 수행해야 할 논리가 같을 경우입니다. 9.2 전역 템플릿 함수 템플릿 문법을 이용하여 template 전역 함수를 만드는 방법에 대해 살펴봅시다. 템플릿 함수는 다음과 같이 작성합니다. template [리턴형식] 템플릿 함수명(입력인자리스트){ [코드]} 이..

[C++] 연관(Association) 관계와 직접 연관(Directed Association) 관계

4. 3 연관(Association)와 직접 연관(Directed Association) 약사와 의사처럼 "약사와 의사는 환자 치료에 연관이 있다."와 같이 수평적인 관계를 연관 관계라 한다. [그림 4.6] 예제에서는 의사가 먼저 치료하고 약사가 조재하거나 약사가 먼저 조재하고 의사가 치료하는 예를 들어보도록 하겠습니다. 의사에게 먼저 치료를 수행시킬 때 약사를 입력 인자로 전달하면 치료를 하는 멤버 메서드에서 약사의 조재하다를 호출하면 사용자는 의사의 치료하다만 호출하더라도 자동으로 약사의 조재하다도 수행되게 됩니다. 이처럼 하나의 개체의 메서드에 다른 개체를 인자로 넘기고 인자로 받은 개체의 메서드를 호출해야 수행되는 것을 더블 디스패치라고 합니다. 이처럼 특정 목적을 수행하기 위해 더블 디스패치를..

반응형