diff --git a/functions.h b/functions.h index 5ecc90fab89cac3d48bf4c95f07f5937a5976e1f..3cb70c9200b5440404c1051e3cffdfb7db4ec3e6 100644 --- a/functions.h +++ b/functions.h @@ -21,9 +21,7 @@ public: void createData(const std::string& filename) { - srand(time(NULL)); //!!! Мы давно nullptr используем - - + srand(time(nullptr)); std::ofstream file(filename, std::ios::trunc); for (int i = 0; i < 100; i++) { @@ -34,7 +32,7 @@ void createData(const std::string& filename) void createDataIterator(const std::string& filename) { - srand(time(NULL)); + srand(time(nullptr)); std::vector vec(100); std::generate(vec.begin(), vec.end(), []() { return rand() % 101 - 50; }); std::ofstream file(filename, std::ios::trunc); @@ -50,7 +48,7 @@ T loadData(const std::string& filename) if (file.fail()) throw MyException("Could not find file"); T container; - int tmp; + typename T::value_type tmp; while (file >> tmp) { container.push_back(tmp); @@ -66,10 +64,8 @@ T loadDataIterator(const std::string& filename) std::ifstream file(filename); if (file.fail()) throw MyException("Could not find file"); - - std::istream_iterator is(file); //!!! Функции не должны зависеть от конкретных типов. Есть value_type. - std::istream_iterator end_of_file; //!!! Функции не должны зависеть от конкретных типов. Есть value_type. - + std::istream_iterator is(file); + std::istream_iterator end_of_file; std::copy(is, end_of_file, std::inserter(container, container.end())); file.close(); return container; @@ -96,9 +92,10 @@ void modify(T& cont) } i = (i + *it) / 2; - typename T::value_type sum = 0; //!!! Ноль данного типа - это T::value_type(), а не 0 + typename T::value_type sum = 0; typename T::value_type sum_abs = 0; - + //typename T::value_type(sum); + //typename T::value_type(sum_abs); for (auto it = cont.begin(); it != cont.end(); ++it) { /**it += i; @@ -166,12 +163,12 @@ void modifyForEach(T& cont) std::for_each(cont.begin(), cont.end(), [ii](typename T::value_type& el) { return el /= ii; }); } - +template void modifyTransform(const std::string& filename, const std::string& filenameOut) { std::ifstream fin(filename); - std::vector tempContainer; - std::copy(std::istream_iterator(fin), std::istream_iterator(), std::back_inserter(tempContainer)); //!!! Функции не должны зависеть от конкретных типов. Есть value_type. + std::vector tempContainer; + std::copy(std::istream_iterator(fin), std::istream_iterator(), std::back_inserter(tempContainer)); double i; for (auto j = tempContainer.begin(); j != tempContainer.end(); j++) { @@ -191,8 +188,7 @@ void modifyTransform(const std::string& filename, const std::string& filenameOut fin.clear(); fin.seekg(0); - //!!! Функции не должны зависеть от конкретных типов. Есть value_type. - std::transform(std::istream_iterator(fin), std::istream_iterator(), std::ostream_iterator(fout, " "), + std::transform(std::istream_iterator(fin), std::istream_iterator(), std::ostream_iterator(fout, " "), [ii](int el) { return el /= ii; }); } @@ -212,7 +208,7 @@ void outputResultCopy(const T& cont, const std::string& filename) { std::ofstream fout(filename); - std::copy(cont.begin(), cont.end(), std::ostream_iterator(fout, " "));//!!! Функции не должны зависеть от конкретных типов. Есть value_type. + std::copy(cont.begin(), cont.end(), std::ostream_iterator(fout, " ")); } template < typename T > diff --git a/main.cpp b/main.cpp index f724d201bae6569b70ff6d77151a8adb09584d99..bbc39ef24688487d5e83d029a99ab7e0998bb85c 100644 --- a/main.cpp +++ b/main.cpp @@ -56,7 +56,7 @@ void main_menu(T& container) modifyForEach(container); break; case 8: - modifyTransform(fileName, fileNameOut); + modifyTransform(fileName, fileNameOut); break; case 9: outputResultStream(container, fileNameOut);