Commit 953be835 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="gen_array0" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/gen_array0" 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/gen_array0" 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="-Wall" />
</Compiler>
<Unit filename="gen_array0_m.hpp" />
<Unit filename="gen_array0_main.cpp" />
<Extensions>
<code_completion />
<debugger />
<envvars />
</Extensions>
</Project>
</CodeBlocks_project_file>
<?xml version="1.0" encoding="windows-1250"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="gen_array0"
ProjectGUID="{8A0B1E93-4A55-4283-AB0B-7733FC1615B5}"
Keyword="Win32Proj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="Debug"
IntermediateDirectory="Debug"
ConfigurationType="1"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
MinimalRebuild="TRUE"
BasicRuntimeChecks="3"
RuntimeLibrary="5"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)/gen_array0.exe"
LinkIncremental="2"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile="$(OutDir)/gen_array0.pdb"
SubSystem="1"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="Release"
IntermediateDirectory="Release"
ConfigurationType="1"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="4"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)/gen_array0.exe"
LinkIncremental="1"
GenerateDebugInformation="TRUE"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
<File
RelativePath=".\gen_array0_main.cpp">
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
<File
RelativePath=".\gen_array0_m.hpp">
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>
/**
* gen_array0_m.hpp
*
* Generikus tömb makróval megvalósítva.
* Nem ellenőriz, nem másolható, nem értékadható.
* Elvi lehetőség, de több sebből vérzik. Nem igazán használható.
*/
#define Array(T) T##Array
#define declare_Array(T) \
class Array(T) { \
T *tp; \
int n; \
Array(T)(const Array(T)&); \
Array(T)& operator=(const Array(T)&); \
public: \
Array(T)(int n=5) :n(n) { tp = new T[n]; } \
T& operator[](int i); \
~Array(T)() { delete[] tp; } \
};
#define implement_Array(T) \
T& Array(T)::operator[](int i) { return tp[i]; }
/**
* gen_array0_main.cpp
*
* Egyszerű program a generikus tömb makróval megvalósított változatához.
* Elvi lehetőség, de több sebből vérzik...
*/
#include <iostream>
#include "gen_array0_m.hpp" //declare+implement makrók
using std::cout;
using std::endl;
declare_Array(int) // intArray deklarációja
implement_Array(int) // intArray def. csak 1-szer !
declare_Array(double) // doubleArray deklarációja
implement_Array(double) // doubleArray def. 1-szer !
struct Valami { // valamilyen osztály
int adat;
};
declare_Array(Valami) // ValamiArray deklarációja
implement_Array(Valami) // ValamiArray def. 1-szer !
int main() {
Array(int) ia(50), ia1(10); // int tömbök
Array(double) da; // default méretű double tömb
Array(Valami) va; // default méretű Valami tömb
ia[12] = 4;
da[2] = 4.54;
va[2].adat = 55;
cout << "Int tomb 12. eleme: " << ia[12] << endl;
cout << "double tomb 2. eleme: " << da[2] << endl;
cout << "Valami tomb 2. eleme: " << va[2].adat << endl;
return 0;
}
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="gen_array1" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/gen_array0" 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/gen_array0" 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="-Wall" />
</Compiler>
<Unit filename="gen_array1.hpp" />
<Unit filename="gen_array1_main.cpp" />
<Extensions>
<code_completion />
<debugger />
<envvars />
</Extensions>
</Project>
</CodeBlocks_project_file>
/**
* gen_array1.hpp
*
* Generikus tömb.
* Előadáson bemutatott minimál változat.
* Nem ellenőriz, nem másolható, nem értékadható
* Az osztály definíciója és a tagfüggvények deklarációit
* nem tesszük külön fájlba, mivel a sablonok fordításánál
* mindkettőnek elérhetőnek kell lennie!
*/
template <class T> // sablon kezdődik
class Array { // osztálysablon
T *tp; // elemek tömbjére mutató pointer
int n; // tömb mérete
Array(const Array&); // másoló konstr. tiltása
Array& operator=(const Array&); // tiltás
public:
Array(int n=5) :n(n) {
tp = new T[n];
}
T& operator[](int i);
const T& operator[](int i) const;
~Array() { delete[] tp; }
};
template <class T> // tagfüggvénysablon
T& Array<T>::operator[](int i) {
return tp[i];
}
<?xml version="1.0" encoding="windows-1250"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="gen_array1"
ProjectGUID="{A407DEDC-085A-4728-96EA-1A3109DA6E94}"
Keyword="Win32Proj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="Debug"
IntermediateDirectory="Debug"
ConfigurationType="1"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
MinimalRebuild="TRUE"
BasicRuntimeChecks="3"
RuntimeLibrary="5"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)/gen_array1.exe"
LinkIncremental="2"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile="$(OutDir)/gen_array1.pdb"
SubSystem="1"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="Release"
IntermediateDirectory="Release"
ConfigurationType="1"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="4"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)/gen_array1.exe"
LinkIncremental="1"
GenerateDebugInformation="TRUE"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
<File
RelativePath=".\gen_array1_main.cpp">
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
<File
RelativePath=".\gen_array1.hpp">
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>
/**
* gen_array1_main.cpp
*
* Egyszerű program a generikus tömb előadáson
* bemutatott minimál változatához.
*/
#include <iostream>
#include "gen_array1.hpp" // sablonok
using std::cout;
using std::endl;
int main()
{
Array<int> ia(50), ia1(10); // int tömbök
Array<double> da; // default méretű double tömbök
Array<const char *> ca; // default méretű const char* tömb
ia[12] = 4;
da[2] = 4.54;
ca[2] = "Hello Template";
cout << "Int tomb 12. eleme: " << ia[12] << endl;
cout << "double tomb 2. eleme: " << da[2] << endl;
cout << "const char* tomb 2. eleme: " << ca[2] << endl;
return 0;
}
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="gen_array2" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/gen_array0" 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/gen_array0" 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="-Wall" />
</Compiler>
<Unit filename="gen_array2.hpp" />
<Unit filename="gen_array2_main.cpp" />
<Extensions>
<code_completion />
<debugger />
<envvars />
</Extensions>
</Project>
</CodeBlocks_project_file>
#ifndef GEN_ARRAY2_HPP
#define GEN_ARRAY2_HPP
/**
* \file gen_array2.hpp
*
* Generikus tömb.
* Előadáson bemutatott 2. változat (sablon paraméterként kapott fix méretű).
* Az osztály definíciója és a tagfüggvények deklarációit
* nem tesszük külön fájlba, mivel a sablonok fordításánál
* mindkettőnek elérhetőnek kell lennie!
* Ezt jelezzük a .hpp kiterjesztéssel.
*/
/// Generikus tömb sablon
/// @param T - adattípus
/// @param s - méret
template <class T, unsigned int s> // sablon kezdõdik
class Array { // osztálysablon
T t[s]; // elemek tömbje. s teplate parameter
public:
/// Indexelés.
/// @param i - index
/// @return - referencia az adott indexű elemre
/// @return - hiba esetén kivételt dob
T& operator[](unsigned int i) {
if (i >= s) throw "Indexelesi hiba";
return t[i];
}
/// Indexelés konstans függvénye.
/// @param i - index
/// @return - referencia az adott indexű elemre
/// @return - hiba esetén kivételt dob
const T& operator[](unsigned int i) const {
if (i >= s) throw "Indexelesi hiba (const)";
return t[i];
}
};
#endif
<?xml version="1.0" encoding="windows-1250"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="gen_array2"
ProjectGUID="{7EBE11DA-9FF3-485B-8130-2E5BC6883EA3}"
Keyword="Win32Proj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="Debug"
IntermediateDirectory="Debug"
ConfigurationType="1"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
MinimalRebuild="TRUE"
BasicRuntimeChecks="3"
RuntimeLibrary="5"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)/gen_array2.exe"
LinkIncremental="2"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile="$(OutDir)/gen_array2.pdb"
SubSystem="1"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="Release"
IntermediateDirectory="Release"
ConfigurationType="1"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="4"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)/gen_array2.exe"
LinkIncremental="1"
GenerateDebugInformation="TRUE"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
<File
RelativePath=".\gen_array2_main.cpp">
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
<File
RelativePath=".\gen_array2.hpp">
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>
/**
* gen_array2_main.cpp
*
* Egyszerű program a generikus tömb előadáson
* bemutatott 2. változatához (sablon paraméterként kapott fix méretű)
*
*/
#include <iostream>
#include "gen_array2.hpp" // sablon
using std::cout;
using std::endl;
int main() {
try {
Array<int, 50> ia; // 50 elemű int tömbök
Array<int, 10> ia1; // 10 elemű int tömb (az int template valtozat újból példányosodott)
Array<double, 10> da; // double tömbök
Array<const char *, 5> ca; // const char* tömb
ia1[0] = ia[12] = 4;
da[2] = 4.54;
ca[2] = "Hello Template";
cout << "Int tomb 12. eleme: " << ia[12] << endl;
cout << "double tomb 2. eleme: " << da[2] << endl;
cout << "const char* tomb 2. eleme: " << ca[2] << endl;
const Array<int, 10> ia2 = ia1; // konstans
cout << "konstans tomb 0. eleme: " << ia2[0] << endl;
cout << "10 elemu konstans tomb 12. eleme: " << ia2[12] << endl; // hiba
} catch (const char *p) { // kivétel elkapása
cout << p << endl;
}
return 0;
}
/**
* fixed_size_gen_array.hpp
*
* Fix mérető tömb. A sablon példányosításakor eldől a méret.
* Ezért minden méretre külön példányosodik az osztály, ami növeli a kód méretét
*/
#ifndef FIXED_SIZE_GEN_ARRAY_H
#define FIXED_SIZE_GEN_ARRAY_H
template <class T, unsigned int s>
class fixArray {
T t[s];
void chkIdx(unsigned i) const { if (i >= s) throw "Index hiba"; }
public:
typedef T value_type; // csak a insertionSort2 használja ki
T& operator[](unsigned int i) {
chkIdx(i);
return t[i];
}
const T& operator[](unsigned int i) const {
chkIdx(i);
return t[i];
}
};
#endif
/**
* generic_cmp.hpp
*
* generikus Összehasonlító osztályok.
*/
#ifndef GENERIC_CMP_H
#define GENERIC_CMP_H
template<class T>
struct less {
bool operator()(const T& a, const T& b) const {
return a < b; }
};
template<class T>
struct greater {
bool operator()(const T& a, const T& b) const {
return a > b; }
};
template <typename T>
class greater_than {
T ref_value;
public:
greater_than(const T& val) : ref_value(val) {}
bool operator()(const T& a) const {
return a > ref_value;
}
};
#endif
/**
* generic_sort.hpp
*
* generikus rendező algoritmusok
*/
#ifndef GENERIC_SORT_H
#define GENERIC_SORT_H
template <typename T>
void swap(T& a, T& b) {
T tmp = a; a = b; b = tmp;
}
// hagyományos tömbökhöz
// Megkapja az adat típust
template <typename T, class F>
void insertionSort(T a[], int n, F cmp) {
for (int i = 1; i < n; i++) {
T tmp = a[i];
int j = i;
while (j > 0 && cmp(tmp, a[j-1])) {
a[j] = a[j-1];
j--;
}
a[j] = tmp;
}
}
// indexelhető tárolókhoz
// Elemtípust nem kap, a swap sablon levezeti
template <typename T, class F>
void insertionSort(T& a, int n, F cmp) {
for (int i = 1; i < n; i++) {
int j = i;
while (j > 0 && cmp(a[j], a[j-1])) {
swap(a[j], a[j-1]);
j--;
}
}
}
// indexelhető tárolókhoz, melynek van value_type belső típusa
template <typename T, class F>
void insertionSort2(T& a, int n, F cmp) {
for (int i = 1; i < n; i++) {
typename T::value_type tmp = a[i];
int j = i;
while (j > 0 && cmp(tmp, a[j-1])) {
a[j] = a[j-1];
j--;
}
a[j] = tmp;
}
}
#endif
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="pelda2" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/pelda2" 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/pelda2" 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="-Wall" />
<Add option="-Wall -pedantic" />
</Compiler>
<Unit filename="fixed_size_gen_array.hpp" />
<Unit filename="generic_cmp.hpp" />
<Unit filename="generic_sort.hpp" />
<Unit filename="pelda2Main.cpp" />
<Extensions>
<code_completion />
<envvars />
<debugger />
<lib_finder disable_auto="1" />
</Extensions>
</Project>
</CodeBlocks_project_file>
/**
* pelda2Main.cpp
*
* Főprogram az előadáson bemutatott komplex példához (pelda2)
* Feltételes fordítástól függ, hogy hagyományos C tömböt, vagy a sablonból
* létrehozott indexelhető adatstruktúrát használják-e a generikus algoritmusok.
*/
#include <iostream>
#include "fixed_size_gen_array.hpp"
#include "generic_sort.hpp"
#include "generic_cmp.hpp"
/// Indexelhető típus elemeit kiírja egy stream-re
template <typename T>
void CopyToStream(const T& t, int n, std::ostream& os) {
for (int i = 0; i < n; ++i)
os << t[i] << ",";
os << std::endl;
}
/// Indexelhető típus elemeit beolvassa egy stream-ről
template <typename T>
int ReadFromStream(T& t, unsigned int n, std::istream& is) {
unsigned int cnt = 0;
while (cnt < n && is >> t[cnt]) cnt++;
return cnt;
}
/// predikátumos kiíró
template <typename T, class F>
void CopyToStream(const T& t, int n, std::ostream& os, F fun) {
for (int i = 0; i < n; ++i)
if (fun(t[i])) os << t[i] << ",";
os << std::endl;
}
#define FIXARRAY
int main() {
#ifdef FIXARRAY
// fixArray- változat
std::cout << "FIXARRAY valtozat" << std::endl;
std::cout << "Adjon max. 10 valos szamot:" << std::endl;
fixArray<double, 10> be; // max. 10 elemű double tömb
int db = ReadFromStream(be, 10, std::cin); // beolvasunk
std::cout << "A szamok :";
CopyToStream(be, db, std::cout); // kiírjuk
fixArray<double, 10> masolat = be; // másolat készül
fixArray<double, 10> masolat2 = be; // másolat készül
insertionSort(be, db, less<double>() ); // növekvő rendezés
insertionSort(masolat, db, greater<double>() ); // csökkenő
std::cout << "novekvo :";
CopyToStream(be, db, std::cout); // kiírjuk az elemeket
std::cout << "csokkeno :";
CopyToStream(masolat, db, std::cout);// kiírjuk az elemeket
insertionSort2(masolat2, db, greater<double>() ); // csökkenő
std::cout << "csokkeno :";
CopyToStream(masolat2, db, std::cout); // kiírjuk az elemeket
std::cout << "> mint 5 :";
CopyToStream(be, db, std::cout, greater_than<int>(5));
std::cout << "> mint 15:";
CopyToStream(be, db, std::cout, greater_than<int>(15));
#else
// C tömb változat
std::cout << "C tombvaltozat" << std::endl;
std::cout << "Adjon max. 10 egesz szamot:" << std::endl;
int ibe[10];
int idb = ReadFromStream(ibe, 10, std::cin);
std::cout << "A szamok :";
CopyToStream(ibe, idb, std::cout);
std::cout << "novekvo :";
insertionSort(ibe, idb, less<int>() );
CopyToStream(ibe, idb, std::cout);
std::cout << "> mint 5 :";
CopyToStream(ibe, idb, std::cout, greater_than<int>(5));
std::cout << "> mint 15:";
CopyToStream(ibe, idb, std::cout, greater_than<int>(15));
#endif
}
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="kodreszletek" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/etc" 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/etc" 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="-std=c++11" />
<Add option="-Wall" />
<Add option="-fexceptions" />
</Compiler>
<Unit filename="kodreszletek.cpp" />
<Extensions>
<code_completion />
<debugger />
<envvars />
</Extensions>
</Project>
</CodeBlocks_project_file>
/**
*
* Előadás különböző kódrészletei
*
*/
#include <iostream>
#include <cstdlib>
#include <cstring>
using std::cout;
using std::endl;
template <typename T, class S>
T leg1(const T a[], int n) {
T tmp = a[0];
for (int i = 1; i < n; ++i)
if (S::select(a[i], tmp)) tmp = a[i];
return tmp;
}
struct kisebb_int {
static bool select(const int a, const int b) { return a < b; }
};
// Lehet egy sablonból generálódó osztály is
template<typename T>
struct nagyobb { // szokásos nagyobb reláció
static bool select(const T a, const T b) { return a > b; }
};
template <typename T, bool select(T, T)>
T leg2(const T a[], int n) {
T tmp = a[0];
for (int i = 1; i < n; ++i)
if (select(a[i], tmp)) tmp = a[i];
return tmp;
}
template<class T>
bool kisebbFv (T a, T b) { return a < b; }
template<class T>
struct kisebbObj {
bool operator()(const T& a, const T& b) {
return a < b;
}
};
template <typename T, typename S>
T legElem(const T a[], int n, S sel) {
T tmp = a[0];
for (int i = 1; i < n; ++i)
if (sel(a[i], tmp)) tmp = a[i];
return tmp;
}
template <typename T, class F>
void rendez (T a[], int n, F cmp) {
for (int i = 1; i < n; i++) {
T ujelem = a[i]; int j = i-1;
while (j >= 0 && cmp(ujelem, a[j])) {
a[j+1] = a[j]; j--;
}
a[j+1] = ujelem;
}
}
template <typename T>
struct kisebb {
bool operator()(T a, T b) { return a < b; }
};
template <typename T>
void Print(const T t[], int n) {
for (int i = 0; i < n-1; ++i)
cout << t[i] << ",";
cout << t[n-1] << endl;
}
template <class T> struct Pont { T x, y; };
template <class T> struct Pont3D { T x, y, z; };
template <class S,
template <class T> class P = Pont >
struct Idom {
P<S> origo; // idom origója
};
template <class T1, typename T2, int i = 0>
struct V {
T1 a1; T2 a2; int x;
V() { x = i;}
};
/// Konstruktor specializációja <int, int>-re
template<>
V<int, int>::V() { a1=a2=x=0; }
/// Template mint paraméter
template <class T> struct miez { T a0; };
template <class K, template <class T> class C = miez>
struct S {
C<K> a1;
};
// paraméterként kapott típus és konstansa, ami
// csak integrális, vagy pointer típus lehet
template <typename T, T c = T()>
struct V1 {
T val;
V1() { val = c;}
};
/// Faktorialis
template <int N>
struct fakt {
enum { fval = N * fakt<N-1>::fval };
};
template <>
struct fakt<0> {
enum { fval = 1 };
};
int main() {
// Használat:
int it[9] = {-5, -4, -3, -2, -1, 0, 1, 2, 3 };
double dt[5] = { .0, .1, .2, .3, 4.4 };
cout << "Legelem:" << endl;
cout << leg1<int, kisebb_int>(it, 9) << endl; // -5
cout << leg1<int, nagyobb<int> >(it, 9) << endl; // 3
cout << leg1<double, nagyobb<double> >(dt, 5); // 4.4
cout << leg2<int, kisebbFv<int> >(it, 9);
cout << legElem<int, kisebbObj<int> >(it, 9, kisebbObj<int>() );
cout << "Rendez:" << endl;
rendez(it, 9, kisebb<int>());
Print(it, 9);
Idom<int> sikidom1; sikidom1.origo.x = 10;
Idom<double> sikidom2; sikidom2.origo.x = 4.5;
Idom<int, Pont3D> test; test.origo.z = 3;
V<int, char, 4> v1;
V<double, int, 8> v2;
V<int, int> v3; /// specializált példány
cout << "v1.x: " << v1.x << endl;
cout << "v2.x: " << v2.x << endl;
cout << "v3.x: " << v3.x << endl;
V1<int, 30> v30;
V1<int*> v0;
cout << "v30.val: " << v30.val << endl;
cout << "v0.val: " << v0.val << endl;
cout << "fakt(5): " << fakt<5>::fval << endl;
}
/**
*
* Ellads kdrszletei
*
*/
#include <iostream>
#include <cstdlib>
using namespace std;
/// sablon osytly
template <class T1, class T2, int i = 0>
struct V {
T1 a1; T2 a2; int x;
V() { x = i;}
};
/// Konstruktor specializcija <int, int>-re
template<>
V<int, int>::V() { a1=a2=x=0; }
/// generizlt beszr rendezs
template <class T>
void rendez (T a[], int n) {
for (int i = 1; i < n; i++) {
T tmp = a[i]; int j = i-1;
while (j >= 0 && a[j] > tmp) {
a[j+1] = a[j]; j--;
}
a[j+1] = tmp;
}
}
/// csere
template<class T> void csere(T& p1, T& p2) {
T tmp = p1; p1 = p2; p2 = tmp;
}
/// leg... kivlaszt
template<class T, int n, class S> T keres(T t[n]) {
T tmp = t[0];
for (int i = 1; i < n; i++) if (S::select(t[i], tmp)) tmp = t[i];
return tmp;
}
/// nhny szoksos prediktum
template<class T> class Min { // szoksos min. keresshez
public:
static int select(T a, T b) { return a < b; }
};
template<class T> class Max { // szoksos max. keressez
public:
static int select(T a, T b) { return a > b; }
};
/// szoksostl eltr kivlaszt fggvny
class intMinAbs {
public:
static int select(int a, int b) { return abs(a) < abs(b); }
};
/// template parameterknt megadott predikatmum fv.
template<class T, int n, int select(T, T)>T keresf(T t[n]) {
T tmp = t[0];
for (int i = 1; i < n; i++) if (select(t[i], tmp)) tmp = t[i];
return tmp;
}
template<class T> int MinFv(T a, T b) {
return a < b;
}
int main()
{
V<int, char, 4> v1;
V<double, int> v2;
V<int, int> v3; /// specializlt pldny
int t[] = { 4, 8, -2, 88, 33, 1, 4, -1 };
rendez<int>(t, 8);
int x1 = 1, x2 = 2;
csere(x1, x2); /// template paramtert levezette
int it[9] = {-5, -4, -3, -2, -1, 0, 1, 2, 3 };
double dt[5] = { .0, .1, .2, .3, 4.4 };
cout << keres<double, 5, Max<double> >(dt) << endl; // maximum
cout << keres<int, 9, Min<int> >(it) << endl; // mimimum
cout << keres<int, 9, intMinAbs>(it) << endl; // eltr kiv. fggvny
cout << keresf<int, 9, MinFv>(it) << endl;
return 0;
}
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