Перегрузить операцию ввода для типа vector

233
26 января 2018, 23:27

Подскажите как правильно нужно перегрузить операцию ввода для записи в файл.

#include <iostream>
using std::ofstream;
using std::ifstream;
using std::cout;
using std::endl;
using std::ios;
#include <fstream>
#include <vector>
using std::vector;
#include "stdio.h"
class Number {
    friend ifstream &operator>>(ifstream &in, Number &ob);
    friend ofstream &operator<<(ofstream &out, vector<Number> &ob);
public:
    Number(int _x1 = 0, int _x2 = 0)
        :x1(_x1), x2(_x2) {}    
    void show() const;
private:
    int x1, x2;
};
int main()
{
    setlocale(NULL, "RUS"); 
    ofstream outFile("file.txt",ios::out);
    if (!outFile) {
        cout << "Файл невозможно открыть.";
        return 1;
    }
    vector<Number> list;
    for (size_t i = 1; i < 10; i++)
        list.push_back(Number(i, pow(i,2));
    outFile << list;    
    outFile.close();    
    return 0;
}
ifstream & operator>>(ifstream & in, Number & ob)
{
    in >> ob.x1;
    in >> ob.x2;        
    return in;
}
ofstream & operator<<(ofstream & out, vector<Number>& ob)
{
    for (static size_t i = 0; i < ob.size(); ++i)
        out << ob;
    return out;
}
void Number::show() const
{
    cout << x1 << ' ' << x2;
    cout << endl;
}
Answer 1

Можно сразу сделать шаблонном:

template<typename T>
std::istream &operator>>(std::istream &stream, std::vector<T> &result)
{
    T number;
    while (stream >> number) {//читаем до первой ошибки ввода
        result.push_back(number);
    }
    return stream;
}
template<typename T>
std::ostream &operator<<(std::ostream &stream, const std::vector<T> &source)
{
    for (auto &&e: source) {
        stream << e << ' ';
    }
    return stream;
}
READ ALSO
Обнулить указатель класса обертки

Обнулить указатель класса обертки

Как обнулить в классе обертке указательКроме примера показанного в коде ниже

264
Удаление из std::list

Удаление из std::list

Нужно удалить элемент из std::listпо итераторуСтандарт С++11 и выше не используется

254
подключение #include &lt;pwd.h&gt; #include &lt;grp.h&gt; ошибка)))

подключение #include <pwd.h> #include <grp.h> ошибка)))

почему при компиляции выдает ошибку где я подключаю

264
C++ вызов функции каждую секунду

C++ вызов функции каждую секунду

Нужно создать функцию, которая будет вызываться каждую секунду и выполнять определенные действияБез sleep, ибо программа должна выполнять...

266