
//
// To jest przykładowy kod z podrozdziału 8.5.1 „Deklarowanie argumentów i typu zwrotnego” książki 
// "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne'a Stroustrupa.
//

#include "std_lib_facilities.h"

//------------------------------------------------------------------------------

double fct(int a, double d);            // Deklaracja funkcji fct() (bez treści).
double fct(int a, double d) { return a*d; }    // Definicja funkcji fct().

int current_power();        // Funkcja current_power() nie pobiera argumentów.

void increase_power(int level);    // Funkcja increase_power() nie zwraca wartości.

// Szuka s w vs.
// vs[hint] może być dobrym miejscem do rozpoczęcia szukania.
// Zwraca indeks znalezionego elementu. Wartość -1 oznacza, że nic nie znaleziono.
int my_find(vector<string> vs, string s, int hint); // Argumenty z nazwami.

int my_find(vector<string>, string, int);           // Argumenty bez nazw.

int my_find(vector<string> vs, string s, int hint)
// Szuka s w vs zaczynając od hint.
{
    if (hint<0 || vs.size()<=hint) hint = 0;
    for (int i = hint; i<vs.size(); ++i)            // Szuka zaczynając od hint.
        if (vs[i]==s) return i;
    if (0<hint) {    // Jeśli nie znajdzie s, szuka przed hint.
        for (int i = 0; i<hint; ++i)
            if (vs[i]==s) return i;
    }
    return -1;    
}

//------------------------------------------------------------------------------

namespace different
{

    int my_find(vector<string> vs, string s, int)   // Trzeci argument pozostaje nieużyty.
    {
        for (int i = 0; i<vs.size(); ++i)
            if (vs[i]==s) return i;
        return -1;    
    }    

}

//------------------------------------------------------------------------------

int main()
{
    const int   N = 4;
    const char* cities[N] = {"Aarhus", "Brussels", "Cincinnati", "Dublin"};
    vector<string> v(cities, cities+N);
    return my_find(v, "Dublin", 2) == different::my_find(v, "Dublin", 2);
}

//------------------------------------------------------------------------------
