Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
cv5_class
#include <iostream> using std::cout; using std::endl; //typedef int TType; // C retro :-( ///----- CVector.h zacatek using TType = double; // C++ modern :-) class CVector { size_t iSize = 0; size_t iCapacity = 0; TType *iData = nullptr; public: TType At(size_t aIndex) const; void SetAt(size_t aIndex, TType aVal); void Alloc(size_t aSize); void Dealloc(); void Add(const CVector &aVec1, const CVector &aVec2); void Add(const CVector &aVec, TType aVal = 0); //implicitni parametr se uvadi jen v header file void Dump(const char *aStr = nullptr) const; ~CVector() //~ negace, good luck pro ty co jeste porad pouzivaji ceskou klavesnici //chytří si klavesnici umí přepnout nebo znají zkratky :D (y) //ale nekteri se snazi pouzivat jen ceskou a ty zkratky spis prodluzuji psani { cout << "zavolan d'tor" << endl; Dealloc(); } private: void CheckIndex(size_t aIndex) const { if(iSize <= aIndex) throw "Index mimo vektor"; } }; /* class CVector */ ///----- CVector.h konec ///----- CVector.cpp zacatek //TType Get( const CVector * const this, size_t aIndex); TType CVector::At(size_t aIndex) const { CheckIndex(aIndex); return iData[aIndex]; } void CVector::SetAt(size_t aIndex, TType aVal) //a { CheckIndex(aIndex); iData[aIndex] = aVal; } void CVector::Alloc(size_t aSize) // Neni potreba kontrolovat, jestli aVec == nullptr. { // aVec je totiz reference. if(iData) // aVec je platny https://i.imgflip.com/4hrk9k.jpg it aint much but its honest work - uz nejde link :( //funguje throw "Jiz naalokovano"; //while(true) // test bad_alloc // new double[100000000ul]; // iData = new TType[aSize]; iSize = aSize; iCapacity = aSize; for(size_t i = 0; i < iCapacity; ++i) iData[i] = 0; } void CVector::Dealloc(void) { delete[] iData; iSize = iCapacity = 0; iData = nullptr; } void CVector::Add(const CVector &aVec1, const CVector &aVec2) { if((aVec1.iSize != aVec2.iSize) || (aVec1.iSize != iSize)) throw("Vektory nejsou stejně velké"); for(size_t i = 0; i < iSize; ++i) iData[i] = aVec1.iData[i] + aVec2.iData[i];//zajisteni ze se bude operace provadet ve vysledkovem datovem typu } // Neni potreba pretypovavat aVec2.iData[i] - automaticky se prizpusobi prvnimu. void CVector::Add(const CVector &aVec, TType aVal) { if (aVec.iSize != iSize) throw("Vektory nejsou stejně velké"); //musime odkazovat na druhy vektor pres . for (size_t i = 0; i < aVec.iSize; ++i) iData[i] = aVec.iData[i] + aVal; } void CVector::Dump(const char *aStr) const//tisk vektoru { if(aStr) cout << aStr << ": "; cout << "{ "; for(size_t i = 0; i < iSize; ++i) cout << iData[i] << ", "; cout << "}\n"; } ///----- CVector.cpp konec ///----- main.cpp zacatek //#include "CVector.h" int main() { CVector v; try { v.Alloc(10); v.SetAt(9, 5.0); cout << v.At(9) << '\n'; CVector v1, v2, v3; v1.Alloc(10); v2.Alloc(10); v3.Alloc(10); v1.SetAt(11, 5.0); for(size_t i = 0; i < 10; ++i) { v1.SetAt(i, TType(i)); v2.SetAt(i, TType(10 + i)); } v1.Dump(); v2.Dump(); v3.Dump(); v3.Add(v2, v1); // do v3 = v1 + v2 v.Add(v1, v2); v1.Dump("v1"); v2.Dump("v2"); v3.Dump("v3"); } catch(const char aStr[]) { cout << "Vyjimka: " << aStr << '\n'; } catch(std::bad_alloc &exc) { cout << "Vyjimka bad_alloc: " << exc.what() << '\n'; // exc.what() ... kde vznikla vyjimka } catch(...) { cout << "Obecna vyjimka\n"; } int i = 42; cout << i++ << endl; //42 tiskne a 43 ulozi do i cout << ++i << endl; //44 tiskne a ulozi return(0); }
run
|
edit
|
history
|
help
0
non-deduced context
You can't erase a std::unordered_map::local_iterator
void pointer
Throttle Example (Send two requests every two seconds)
Saam hash example
Ordered Graphs
Forgetting to check end
Balanced Insert Example
sort
Pointer array