Работа с контейнером и файлом input.txt
Задача звучит следующим образом. Написать функцию, с помощью которой подготовить текстовый файл input.txt, сохранив в него 100 случайных целых чисел в диапазоне от -50 до 50 по одному на строке. Файл возвращается функцией как результат. Написать функцию inputfile(), получающую файл как аргумент и возвращающий последовательный контейнер, заполненный числами из файла. Написать функцию modify(), получающую в качестве аргумента контейнер- результат функции inputfile(). Модифицированный контейнер возвращается в качестве результата. Добавить контейнер-результат вычисление суммы и среднего арифметического по абсолютной величине. В качестве контейнера использовать вектор, двустороннюю очередь и список.
(в коде, для примера я делал не 100 чисел, а 5) У меня проблемы с 38, 56, 73, 116 строками кода (я сделал их как комментарии) Этот код создает случайные целые числа, но не выполняет функции Modify () и Add (). На консоли у меня высвечивается: File is done! и Maiking of container... Что мне делать?
#include<iostream>
#include<fstream>
#include<string>
#include<sstream>
#include<ctime>
#include<vector>
#include<deque>
#include<list>
#include<algorithm>
#include<cstdlib>
#include <iterator>
#include <cmath>
#include <stdio.h>
#pragma warning(suppress : 4996)
using namespace std;
#include <stdio.h>
FILE* File(int N, int count) {
srand(time(NULL));
FILE* file;
fopen_s(&file, "input.txt", "w");
fstream in(file);
for (int i = 1; i <= count; ++i) {
in << rand() % (2 * N + 1) - N << endl;
}
cout << "File is done!" << endl;
return file;
}
vector<int> inputfile_to_vector(FILE *File){
// ifstream in(File);
fstream in("input.txt", fstream::in | fstream::out);
in.seekg(0);
int x;
vector<int> vector;
in >> x;
while (!in.eof()) {
vector.push_back(x);
in >> x;
}
return vector;
}
deque<int> inputfile_to_deque(FILE *File){
ifstream in(File);
// fstream in("input.txt", fstream::in | fstream::out);
in.seekg(0);
int x;
deque<int> deque;
in >> x;
while (!in.eof()){
deque.push_back(x);
in >> x;
}
return deque;
}
list<int> inputfile_to_list(FILE *File){
ifstream in(File);
// fstream in("input.txt", fstream::in | fstream::out);
in.seekg(0);
int x;
list<int> list;
in >> x;
while (!in.eof()){
list.push_back(x);
in >> x;
}
return list;
}
template <class T>
T& modify(T& x){
int firstnechot = 0;
for (const auto& i : x){
if (std::abs(i) % 2 == 1){
firstnechot = std::abs(i);
break;
}
}
for (auto& i : x) { i += firstnechot; }
return x;
}
template <class T>
inline void Add(T& conteiner){
typename T::const_iterator pos;
int S = 0, SA = 0, N = 0;
for (pos = conteiner.begin(); pos != conteiner.end(); ++pos) {
S += *pos;
SA += abs(*pos);
N++;
}
conteiner.push_back(S);
//conteiner.push_back(SA / N);
cout << "Sum and average were add to container" << endl;
}
int Random(){ return rand() % (2 * 50 + 1) - 50; }
int main(){
setlocale(0, "");
FILE *F = File(50, 5);
cout << "Maiking of container..." << endl;
vector<int> V = inputfile_to_vector(F);
deque<int> D = inputfile_to_deque(F);
list<int> L = inputfile_to_list(F);
cout << "Changing of container..." << endl;
modify(V);
Add(D);
system("pause");
}