C++/디딤돌 C++

[C++ 소스] 최대값 위치 찾기(전역 template 함수)

언제나휴일 2016. 12. 17. 19:28
반응형

[C++ 소스] 최대값 위치 찾기(전역 template 함수)


Book.cpp

Book.h

ehalgorithm.h



//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++] 59. 전역 템플릿 함수




반응형