반응형

전체 글 2934

[자료구조와 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 생성 시에 저장소의 크기를 최대값으로 하고 모든 원소를 초기값으로 설정해야 합니다. 사실 ..

[자료구조와 STL] 3. vector (배열)

2. vector (배열) STL에서 제공하는 컨테이너 중에서 C++언어에서 제공하는 배열과 가장 흡사한 컨테이너는 vector입니다. vector 내부에는 원소 형식들을 연속적인 프로그램 메모리에 보관할 수 있는 물리적 공간을 가지고 있기 때문에 변수명과 인덱스 연산자를 통해 원하는 원소를 찾을 수 있습니다. vector arr(5);for(int index = 0; index < 5; ++index){ arr[index] = index+1;} C++언어에서 제공되는 배열은 유효하지 않은 인덱스를 통해 접근하였을 때 프로그램이 터지지 않는 경우도 발생합니다. 이러면 개발 단계에서 빠르게 논리적 버그를 찾지 못하여 비용이 커지게 됩니다. 하지만 STL에서 제공하는 vector에서는 보관된 원소의 개수를 ..

[자료구조와 STL] 2. 공통적으로 사용하는 것들

1.2 이 책에서 공통적으로 사용하는 것들 앞으로 이 책에서 사용할 클래스 ehglobal을 소개를 하겠습니다. ehglobal 클래스에는 이 책에 소개되는 전반적인 예제 프로그램에서 공통으로 사용할 만한 함수들을 정적 멤버 메서드로 캡슐화되어 있습니다. 이 책에 공통으로 사용 가능한 것들에 대한 정의에서는 형식 명과 메서드 명 모두 소문자만을 사용하고 있습니다. 먼저, 콘솔 화면을 지우는 메서드로 clrscr을 제공할 것입니다. static void clrscr(); 사실, 메서드 내에서 하는 작업은 단순히 친 명령을 system 함수를 이용하는 것밖에 없습니다. 여기에서는 자주 사용하는 함수들을 ehglobal 클래스의 정적 멤버 메서드로 캡슐화하여 사용자 편의를 제공하는 것 외에는 특별한 의미가 없..

[자료구조와 STL] 1. STL 소개

1. 들어가기에 앞서 1.1 STL 소개 STL(Standard Template Library, 표준 템플릿 라이브러리)은 개체들을 보관하기 위한 다양한 컨테이너와 이들 컨테이너에 보관된 개체들을 반복적으로 순회할 수 있게 해 주는 반복자, 사용자에서 정의한 코드를 입력 인자로 전달받아 처리할 수 있게 추상화한 함수 개체, 다양한 문제 해결 방법이 구현된 함수들로 구성된 알고리즘 등으로 구성되어 있습니다. 이 책에서는 STL에 제공되는 일부 컨테이너와 반복자, 함수 개체 및 알고리즘을 소개하는 동시에 기본적인 자료구조에 대한 개념과 구현 방법을 전달할 것입니다. 자료구조를 다루는 수많은 책에서는 한정된 형식의 자료를 보관하는 형태의 예를 들고 있는 것과는 달리 이 책에서는 STL에 제공하는 것처럼 설계와..

반응형