Файл input.txt, деки, список двусторонняя очередь
Проверьте, пожалуйста, задачу. В частности не понятно про аргумент в качестве файла, и в main - как это выводится в файл. P.S. у меня еще написана функция Add_Max_Min_Avarage, но это доп. задание, там надо добавить к каждому элементу контейнера среднее максимального и минимального. Их я нашел, но как добавить к каждому элементу?
#include <iostream>
#include <fstream>
#include <string>
#include <ctime>
#include <vector>
#include <deque>
#include <list>
#include <algorithm>
#include <iterator>
#include <cmath>
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;
}
std::cout << "File is done!" << std::endl;
}
///////////
**
template <class T>
T& inputfile(const std::string& File) {
std::vector<int> vec; //??
std::fstream in(File);
if (!in.is_open()) std::cout << "Cannot open file!\n";
else {
for (int x; in >> x; ) {
T.push_back(x);
}
}
return T;
}
**
///////////
std::vector<int> inputfile_to_vector() {
std::vector<int> vec;
std::fstream in("input.txt", std::fstream::in | std::fstream::out);
if (!in.is_open()) std::cout << "Cannot open file!\n";
else {
for (int x{}; in >> x; ) {
vec.push_back(x);
}
}
return vec;
}
std::deque<int> inputfile_to_deque() {
std::deque<int> deq;
std::fstream in("input.txt", std::fstream::in | std::fstream::out);
if (!in.is_open()) std::cout << "Cannot open file!\n";
else {
for (int x{}; in >> x; ) {
deq.push_back(x);
}
}
return deq;
}
std::list<int> inputfile_to_list() {
std::list<int> list;
std::fstream in("input.txt", std::fstream::in | std::fstream::out);
if (!in.is_open()) std::cout << "Cannot open file!\n";
else {
for (int x; in >> x; ) {
list.push_back(x);
}
}
return list;
}
template <class T>
T& Modify(T& X) {
std::ofstream out("input.txt");
int First_Odd = 0;
for (const auto& i : X) {
if (std::abs(i) % 2 == 1) {
First_Odd = i;
break;
}
}
return X;
}
template <class T>
void Add_Sum_Avarage(T& conteiner) {
typename T::iterator pos;
int S = 0, N = 0;
double SA = 0;
for (pos = conteiner.begin(); pos != conteiner.end(); ++pos) {
S += *pos;
SA += *pos;
N++;
}
conteiner.push_back(S);
conteiner.push_back(SA / N);
std::cout << "Sum of container = " << S << std::endl;
std::cout << "Average of container = " << (SA / N) << std::endl;
std::cout << "Sum and average were add to container!" << std::endl;
}
template <class T>
void Add_Max_Min_Avarage(T& conteiner) {
typename T::iterator pos;
int MAX = 0;
int MIN = 0;
int S2 = 0;
typename T::iterator pos1;
typename T::iterator pos2;
typename T::iterator ii;
for (pos1 = conteiner.begin(); pos1 != conteiner.end(); ++pos1)
if (MAX < *pos1) MAX = *pos1; std::cout << "\nMAX = " << MAX << std::endl;
for (pos2 = conteiner.begin(); pos2 != conteiner.end(); ++pos2)
if (MIN > * pos2) MIN = *pos2; std::cout << "MIN = " << MIN << std::endl;
double Avarage = (MAX + MIN) / 2.0;
std::cout << "Avarage of max and min = " << Avarage << '\n' << std::endl;
conteiner.push_back(MAX);
conteiner.push_back(MIN);
conteiner.push_back(Avarage);
}
int Random() { return rand() % (2 * 50 + 1) - 50; }
template <class T>
void display(const T& x) {
std::ofstream out("input.txt");
for (const auto& i : x) out << i << " ";
out << '\n';
}
int main(){
srand(time(NULL));
File(50, 5);
std::cout << "Making of container..." << std::endl;
std::vector<int> V = inputfile_to_vector();
std::deque<int> D = inputfile_to_deque();
std::list<int> L = inputfile_to_list();
std::cout << "Changing of container..." << std::endl;
Modify(V);
display(V);
Add_Sum_Avarage(D);
display(D);
}
Ответы (1 шт):
Автор решения: EOF
→ Ссылка
Никак Вы меня не поймёте:) Все Ваши функции inputfile_to_ отличаются только типом используемого контейнера. Все эти функции можно заменить одним шаблоном:
template <typename Container>
Container inputfile()
{
Container cont;
std::fstream in("input.txt", std::fstream::in | std::fstream::out);
if (!in.is_open())
std::cout << "Cannot open file!\n";
else {
for (int x{}; in >> x; ) {
cont.push_back(x);
}
}
return cont;
}
А в main вызывать примерно так:
std::vector<int> V = inputfile<std::vector<int>>();
std::deque<int> D = inputfile<std::deque<int>>();
std::list<int> L = inputfile<std::list<int>>();
