Commit 99c26cbb by Szeberényi Imre

v0

parents
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="CppMonoton" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/STLMonoton" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Debug/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
</Compiler>
</Target>
<Target title="Release">
<Option output="bin/Release/STLMonoton" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Release/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
</Compiler>
<Linker>
<Add option="-s" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-pedantic" />
<Add option="-std=c++11" />
<Add option="-Wall" />
<Add option="-Werror" />
</Compiler>
<Unit filename="fancy_iterators.hpp" />
<Unit filename="gtest_lite.h" />
<Unit filename="monoton.hpp" />
<Unit filename="monoton_test.cpp" />
<Extensions>
<code_completion />
<envvars />
<debugger />
<lib_finder disable_auto="1" />
</Extensions>
</Project>
</CodeBlocks_project_file>
/*
* \file fancy_iterators.hpp
*
*/
#ifndef FANCY_ITERATORS_HPP
#define FANCY_ITERATORS_HPP
/// counting iterator.
/// Végtelen számláló.
/// Olyan típusokra példányosítható, aminek van pre-inkremens operátora.
template <typename T>
class counting_iterator : public std::iterator<std::input_iterator_tag, T>{
/// öröklés: az std algoritmusok igy ellenőrizni tudják a tulajdonságokat
T t;
public:
/// Konstruktor
/// @param t - kezdőérték
counting_iterator(T t = T()) : t(t) {}
/// Összehasonlító operátorok
bool operator==(const counting_iterator& rhs) const { return t == rhs.t; }
bool operator!=(const counting_iterator& rhs) const { return !operator==(rhs); }
/// pre-inkremens
/// csak hatékonyság miatt ref. visszatérésű
/// értelmetlen balértékként használni
const counting_iterator& operator++() { ++t; return *this; }
/// post-inkremens
counting_iterator operator++(int) {
counting_iterator tmp = *this; /// eltesszük a jelenlegi értéket
operator++();
return tmp; /// léptetés előttivel tér vissza
}
/// dereferálás
/// nem engedjük balértékként használni, ne változtathassa meg a sorozatot
const T& operator*() const { return t; }
/// szelekció pointerrel, ami címet kell, hogy adjon
/// csak formai, mert csak privát adattag lenne elérhető, így nem lehet használni
const T* operator->() const { return &operator*(); }
};
#endif // FANCY_ITERATORS_HPP
This diff is collapsed. Click to expand it.
#ifndef MONOTON_HPP
#define MONOTON_HPP
#error "Itt készitse el a monoton sablont!"
#endif // MONOTON_HPP
**Készítsen** generikus algoritmust (*monoton*) annak eldöntésére, hogy egy iterátorokkal adott jobbról nyílt intervallum elemei monoton sorozatot alkotnak-e. Az algoritmus harmadik paramétere egy predikátum!
Ezzel a kétoperandusú predikátummal adható meg egy adott elem és az őt megelőző elem viszonya a sorozaton belül.
A sablon használatára mutat példát az alábbi kódrészlet:
std::vector<int> v;
...
if (monoton(v.begin(), v.end(), std::greater<int>()))
std::cout << "Ez a sorozat szigorúan monoton növekvő\n";
else if (monoton(v.begin(), v.end(), std::greater_equal<int>()))
std::cout << "Ez a sorozat monoton növekvő\n";
else if (monoton(v.begin(), v.end(), std::less<int>()))
std::cout << "Ez a sorozat szigorúan monoton csökkenő\n";
else if (monoton(v.begin(), v.end(), std::less_equal<int>()))
std::cout << "Ez a sorozat monoton csökkenő\n";
else
std::cout << "Ez a sorozat nem monoton\n";
**Feladatok:**
1. Töltse le az előkészített projektet az SVN tárolóból!
[https://git.ik.bme.hu/Prog2/ell_feladat/CppMonoton](https://git.ik.bme.hu/Prog2/ell_feladat/CppMonoton.git)
2. Készítse el a **monoton** sablont a *monoton.hpp* állományban! Az algoritmust úgy valósítsa meg hogy csak az
ún. *Input Iterator*-okra jellemző műveleteket használja (konstruktor, másoló, értékadó, ++, ==, != ++, *, ->).
3. Tesztelje a megadott tesztprogrammal a sablont!
4. Amennyiben a tesztek jól futnak, töltse fel a *JPorta* feladatbeadó rendszerbe a **monoton.hpp** fájlt!
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment