Есть код, в котором генерируются последовательности и помещаются в input.txt. В output.txt. с этими последовательностями происходит модификация. Суть в том, что при новом открытии файла, старые значения должны удаляться. То есть, я запускаю код, получаю последовательности. Далее запускаю код во второй раз, и в файлах должны быть уже новые. В input.txt это работает. А в output.txt при каждом новом выполнении программы и дальнейшем открытии файла, все элементы помещаются вместе со старыми. Что не так?
#include <iostream>
#include <fstream>
#include <string>
#include <ctime>
#include <vector>
#include <deque>
#include <list>
#include <algorithm>
#include <iterator>
#include <cmath>
double Avarage;
double Avarage1;
double Avarage2;
void File(int N, int count){
std::ofstream out("input.txt");
for (int i = 1; i <= count; ++i) {
out << rand() % (2 * N + 1) - N << std::endl;
}
out << "File is done!\n" << std::endl;
}
template <typename Container>
Container inputfile(const std::string& File){
std::fstream in(File);
Container cont;
if (!in.is_open()) std::cout << "Cannot open file!\n";
else {
for (int x{}; in >> x; ) {
cont.push_back(x);
}
}
return cont;
}
template <class T>
void Add_Sum_Avarage(T& conteiner) {
std::ofstream out("output.txt", std::ofstream::app);
typename T::iterator it0;
typename T::iterator it2;
double S = 0;
double N = 0;
for (it0 = conteiner.begin(); it0 != conteiner.end(); ++it0) {
S += *it0;
N++;
}
conteiner.push_back(S);
conteiner.push_back(S / N);
for (it2 = conteiner.begin(); it2 != conteiner.end(); ++it2) out << *it2 << std::endl;
out << "Sum of container = " << S << std::endl; //сумма всех чисел в контейнере
out << "Average of container = " << (S / N) << std::endl; //среднее арифметичиское всех чисел в контейнере
}
template <class T>
T& Modify(T& container) {
std::ofstream out("output.txt", std::ofstream::app);
out << "\nModify:" << std::endl;
typename T::iterator it1;
typename T::iterator it2;
double MAX = 0;
double MIN = 0;
for (it1 = container.begin(); it1 != container.end(); ++it1)
if (MAX < *it1) MAX = *it1; out << "MAX = " << MAX << std::endl; //поиск максимального числа в контейнере
for (it2 = container.begin(); it2 != container.end(); ++it2)
if (MIN > *it2) MIN = *it2; out << "MIN = " << MIN << std::endl; //поиск минимального числа в контейнере
double Avarage = (MAX + MIN) / 2.0;
out << "Avarage of max and min = " << Avarage << std::endl;
for (const auto& i : container) out << i + std::abs(Avarage) << std::endl;
return container;
}
template<class T>
T& Modify2(T& conteiner, typename T::iterator& it3, typename T::iterator& it4) {
std::ofstream out("output.txt", std::ofstream::app);
out << "\nModify(iterator):" << std::endl;
double MAX = 0;
double MIN = 0;
for (it3 = conteiner.begin(); it3 != conteiner.end(); ++it3)
if (MAX < *it3) MAX = *it3; out << "MAX = " << MAX << std::endl;//поиск максимального числа в контейнере
for (it4 = conteiner.begin(); it4 != conteiner.end(); ++it4)
if (MIN > *it4) MIN = *it4; out << "MIN = " << MIN << std::endl;//поиск минимального числа в контейнере
double Avarage = (MAX + MIN) / 2.0;
out << "Avarage of max and min = " << Avarage << std::endl;
for (const auto& i : conteiner) out << i + std::abs(Avarage) << std::endl;
return conteiner;
}
template <class T>
void outfile(T& Container) {
std::ofstream out("output.txt", std::ofstream::app);
typename T::iterator it3;
for (it3 = Container.begin(); it3 != Container.end(); ++it3) {
out << *it3 << std::endl;
}
std::cout << "File output" << std::endl;
}
int Random() { return (std::rand() % 51); }
double AvarageSum1(double& i1) { return i1 += Avarage1; }
double AvarageSum2(double& i2) { return i2 += Avarage2; }
int main(){
std::ofstream out("input.txt", std::ofstream::app);
std::ofstream out2("output.txt", std::ofstream::app);
srand(signed (std::time(0)));
File(50, 5);
std::cout << "Making of container..." << std::endl;
std::vector<double> V = inputfile<std::vector<double>>("input.txt");
std::deque<double> D = inputfile<std::deque<double>>("input.txt");
std::list<double> L = inputfile<std::list<double>>("input.txt");
std::cout << "Changing of container..." << std::endl;
std::deque<double>::iterator itt3;
std::deque<double>::iterator itt4;
Add_Sum_Avarage(D);
Modify(D);
Modify2(D, itt3, itt4);
std::cout << "Making and changing of container with the help of methods" << std::endl;
std::vector<double> v_each (5);
std::vector<double>::iterator pos1;
out << "Generate()" << std::endl;
std::generate(v_each.begin(), v_each.end(), Random);
bool flag1 = false;
for (pos1 = v_each.begin(); pos1 != v_each.end(); ++pos1) {
auto minmax = std::minmax_element(v_each.begin(), v_each.end());
Avarage1 = ((*minmax.first + *minmax.second) / 2.0);
if (!flag1) {
out << "MAX = " << *minmax.second << std::endl;
out << "MIN = " << *minmax.first << std::endl;
out << "Avarage = " << Avarage1 << std::endl;
flag1 = true;
}
out << *pos1 << std::endl;
}
out2 << "\nChanging of container with the help of method for_each()" << std::endl;
std::for_each(v_each.begin(), v_each.end(), AvarageSum1);
outfile(v_each);
std::list<double> v_transform (5);
std::list<double>::iterator pos2;
out << "\nGenerate()" << std::endl;
std::generate(v_transform.begin(), v_transform.end(), Random);
bool flag2 = false;
for (pos2 = v_transform.begin(); pos2 != v_transform.end(); ++pos2) {
auto minmax = std::minmax_element(v_transform.begin(), v_transform.end());
Avarage2 = ((*minmax.first + *minmax.second) / 2.0);
if (!flag2) {
out << "MAX = " << *minmax.second << std::endl;
out << "MIN = " << *minmax.first << std::endl;
out << "Avarage = " << Avarage2 << std::endl;
flag2 = true;
}
out << *pos2 << std::endl;
}
out2 << "\nChanging of container with the help of method transform()" << std::endl;
std::transform(v_transform.begin(), v_transform.end(), v_transform.begin(), AvarageSum2);
outfile(v_transform);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
я вот только не давно узнал про заголовочный файл #include <bits / stdc ++H> и зачал искать информацию по этой библиотеке
Мой вопрос заключается в том, правильно ли реализована логика копирования и перемещения конструкторов и операторов наследуемого класса
Как наиболее точно измерить потребляемую программой память?