diff --git a/Makefile b/Makefile index e450f6f..f34f88a 100755 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ - export BUILD_CMD=clang++ -Wall -std=c++17 -Wall -Wextra + export BUILD_CMD=clang++ -Wall -std=c++17 -Wall -Wextra -O1 -g -fsanitize=address -fno-omit-frame-pointer setup: mkdir build diff --git a/src/sheet04.cpp b/src/sheet04.cpp index 65a1e9f..d2ca5ae 100644 --- a/src/sheet04.cpp +++ b/src/sheet04.cpp @@ -2,10 +2,12 @@ #include #include #include +#include +#include + class vec { private: - const double nan = std::nan(""); unsigned vec_size; double *vector; public: @@ -24,11 +26,11 @@ class vec } ~vec() {delete[] vector;} - vec(const vec &m) : vec_size(m.vec_size), vector(new double[vec_size]) + vec(const vec &m) : vec_size(m.size()), vector(new double[m.size()]) { - for(size_t i=0; ivec_size) - { - return nan; - } + try{ + if(idx>vec_size) + { + throw (idx); + } + return vector[idx]; + } + catch (size_t i) + { + std::cout << "Invalid vector index: " << idx << '\n'; + idx = size() - 1; + } return vector[idx]; } -}; \ No newline at end of file + + const double& operator[] (size_t idx) const + { + try{ + if(idx>vec_size) + { + throw (idx); + } + + return vector[idx]; + } + catch (size_t i) + { + std::cout << "Invalid vector index: " << idx << '\n'; + idx = size() - 1; + } + return vector[idx]; + } + + friend std::ostream& operator<< (std::ostream &os, const vec &v) + { + os << '['; + for(size_t i=0; i &v, size_t from, size_t to); + + int main() + { + std::string ans; + std::cout << "y for vector exercies: "; + std::cin >> ans; + if(ans == "y") + { + vec vec2(2); + vec2[0] = 1; + vec2[1] = 1; + std::cout << vec2 << '\n'; + vec vec3(3, 1); + std::cout << vec3 << '\n'; + vec vec3p3(vec3+vec3); + std::cout << vec3p3 << '\n'; + vec vec3m3(vec3-vec3); + std::cout << vec3m3 << '\n'; + double vec3x3(vec3*vec3); + std::cout << vec3x3 << '\n'; + vec vec3x2(vec3*3); + std::cout << vec3x2 << '\n'; + vec vec4 = {1,1,1,1}; + vec4[1] = vec3x2[1]; + std::cout << vec4 << '\n'; + std::cout << vec3*vec4 << '\n'; + vec vec5 = vec4; + std::cout << vec5 << '\n'; + vec vec6 = std::move(vec5); + std::cout << vec6 << '\n'; + vec vec7(std::move(vec6)); + std::cout << vec7 << '\n'; + } + std::vector v = {1,5,6,23,7,8,9,21,12,4}; + for(size_t i=0; i &v, size_t from, size_t to) + { + if(from > v.size()-1 || to < from) { return; } + if(to > v.size()-1) {to = v.size()-1; } + bool unsorted; + do + { + unsorted = false; + for(size_t i = from; i<=to-1;++i) + { + if(v[i]>v[i+1]) + { + std::swap(v[i],v[i+1]); + unsorted = true; + } + } + }while(unsorted); + } \ No newline at end of file