[C++ 소스] 최대값 위치 찾기(전역 template 함수)
//ehalgorithm.h
#pragma once
template <typename data,typename compare>
data *get_max_pos(data *base, size_t n,compare com)
{
size_t mi = 0;//최대값이 있는 인덱스를 0으로 초기 설정
size_t index;
for(index = 1; index<n; index++)
{
if(com(base[mi], base[index])<0) //index 요소가 더 크면
{
mi = index; //mi를 index로 변경
}
}
return base + mi;//최대값의 위치 반환
}
//Book.h
#pragma once
#include <iostream>
#include <ostream>
#include <string>
using namespace std;
class Book
{
const string isbn;
string title;
public:
Book(string isbn,string title);
string GetISBN()const;
string GetTitle()const;
void View()const;
};
//Book.cpp
#include "Book.h"
Book::Book(string isbn,string title):isbn(isbn)
{
this->title = title;
}
string Book::GetISBN()const
{
return isbn;
}
string Book::GetTitle()const
{
return title;
}
void Book::View()const
{
cout<<"ISBN:"<<isbn<<" 제목:"<<title<<endl;
}
//전역 템플릿 함수
#include "ehalgorithm.h"
#include "Book.h"
int compare_int(int a,int b)
{
return a-b;
}
int compare_isbn(Book *book1, Book *book2)
{
string isbn1 = book1->GetISBN();
string isbn2 = book2->GetISBN();
return isbn1.compare(isbn2);
}
int main()
{
int arr[10]={5,3,29,56,34,22,9,17,8,4};
int *mi = get_max_pos(arr,10,compare_int);
for(int i = 0; i<10; i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
cout<<"최대값:"<<*mi<<", 최대값 요소의 인덱스:"<<mi - arr<<endl;
Book *books[5];
books[0] = new Book("1234","C언어");
books[1] = new Book("7834","C++");
books[2] = new Book("4534","알고리즘");
books[3] = new Book("9934","자료구조");
books[4] = new Book("1284","C#");
Book **max_book = get_max_pos(books,5,compare_isbn);
for(int i = 0; i<5; i++)
{
books[i]->View();
}
cout<<"최대값 요소의 인덱스:"<<max_book - books<<endl;
(*max_book)->View();
for(int i = 0; i<5;i++)
{
delete books[i];
}
return 0;
}
실행 결과
5 3 29 56 34 22 9 17 8 4
최대값:56, 최대값 요소의 인덱스:3
ISBN:1234 제목:C언어
ISBN:7834 제목:C++
ISBN:4534 제목:알고리즘
ISBN:9934 제목:자료구조
ISBN:1284 제목:C#
최대값 요소의 인덱스:3
ISBN:9934 제목:자료구조
본문
'C++ > 디딤돌 C++' 카테고리의 다른 글
[C++ 소스] 집합 관계(Aggregation Relation), 필통과 연필 (0) | 2016.12.18 |
---|---|
[C++ 소스] 동적 배열(템플릿 클래스) (0) | 2016.12.17 |
[C++ 소스] string 클래스 내부 (0) | 2016.12.16 |
[C++ 소스] 개체 출력자 (0) | 2016.12.16 |
[C++ 소스] iostream 클래스 내부 (0) | 2016.12.16 |