Форум программистов, компьютерный форум CyberForum.ru

Запись вектора в файл - C++

Восстановить пароль Регистрация
 
dima55501
 Аватар для dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
22.01.2014, 18:55     Запись вектора в файл #1
Добрый вечер. Есть вектор, содержащий объекты. Мне необходимо записать его в файл, потом считать из него информацию. Как не пытался, все не получается, прошу помочь. Вот накидал простенький пример, объясните на нем, пожалуйста.
P.S. Читал что можно сделать это как то через итераторы, но тоже ничего не получилось.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <vector>
#include <fstream>
 
using namespace std;
 
class Test
{
private:
    int num;
public:
    Test(int x) { num = x; }
    void get_num() { cin >> num; }
    void show_num() { cout << num << endl; }
};
 
int main()
{
    vector<Test> vec;
    Test obj(3);
    ofstream out("test.txt", ios::binary);
    ifstream in("test.txt", ios::binary);
    vec.push_back(obj);
    out.write(reinterpret_cast<char *>(&vec), sizeof(vec));
    in.read(reinterpret_cast<char *>(&vec), 16);
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6403 / 4869 / 447
Регистрация: 14.02.2011
Сообщений: 16,159
22.01.2014, 19:00     Запись вектора в файл #2
Цитата Сообщение от dima55501 Посмотреть сообщение
out.write(reinterpret_cast<char *>(&vec), sizeof(vec));
вот здесь ты записываешь в файл указатели на свои элементы
а нужно достать каждый элемент и записать его в файл
примерно так
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5553 / 3032 / 339
Регистрация: 29.11.2010
Сообщений: 8,197
22.01.2014, 19:02     Запись вектора в файл #3
Запись в файл или на экран
C++
1
std::copy(vec.begin(), vec.end(), std::ostream_iterator<Test>(std::cout, "\n");
Вместо cout можно указать объект ostream (или в частном случае - ofstream). Для Test должен быть определен оператор <<.

Добавлено через 1 минуту
Считывание с файла
C++
1
2
3
4
std::ifstream ifs("input.txt");
if (!ifs) return 1;
typedef std::istream_iterator<Test> input_Test;
std::copy(input_Test(ifs), input_Test(), std::back_inserter(vec));
Для Test должен быть определен оператор >>
dima55501
 Аватар для dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
22.01.2014, 19:16  [ТС]     Запись вектора в файл #4
MrGluck, перегрузил оператор вывода, все равно ругается на ostreambuf_iterator, пишет, что нет перегруженной функции, принимающей двух аргументов.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <vector>
#include <fstream>
 
using namespace std;
 
class Test
{
private:
    int num;
public:
    Test(int x) { num = x; }
    void get_num() { cin >> num; }
    void show_num() { cout << num << endl; }
    friend ostream &operator<<(ostream &, Test &);
};
 
ostream &operator<<(ostream &stream, Test &obj)
{
    stream << obj.num;
    return stream;
}
 
int main()
{
    vector<Test> vec;
    Test obj(3);
    ofstream out("test.txt", ios::binary);
    ifstream in("test.txt", ios::binary);
    vec.push_back(obj);
    copy(vec.begin(), vec.end(), ostreambuf_iterator<Test>(out, "\n"));
    system("pause");
    return 0;
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5553 / 3032 / 339
Регистрация: 29.11.2010
Сообщений: 8,197
22.01.2014, 19:17     Запись вектора в файл #5
Цитата Сообщение от MrGluck Посмотреть сообщение
std::ostream_iterator<Test>
Цитата Сообщение от dima55501 Посмотреть сообщение
ругается на ostreambuf_iterator
найдите отличия
dima55501
 Аватар для dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
22.01.2014, 19:23  [ТС]     Запись вектора в файл #6
MrGluck, да, точно. Сейчас исправил, но все равно не компилируется, пишет что " бинарный "<<": не найден оператор, принимающий правый операнд типа "const Test" (или приемлемое преобразование отсутствует)". Я его может перегрузил неправильно?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5553 / 3032 / 339
Регистрация: 29.11.2010
Сообщений: 8,197
22.01.2014, 19:27     Запись вектора в файл #7
dima55501,
C++
1
ostream &operator<<(ostream &stream, const Test &obj)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2014, 19:28     Запись вектора в файл
Еще ссылки по теме:

Запись и чтение вектора из файла C++
Запись вектора в бинарный файл C++
C++ Запись вектора в бинарный файл
C++ Запись в бинарный файл двумерного строкового вектора и его считывание
C++ Запись вектора строк в бинарный файл

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
dima55501
 Аватар для dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
22.01.2014, 19:28  [ТС]     Запись вектора в файл #8
MrGluck, спасибо большое
Yandex
Объявления
22.01.2014, 19:28     Запись вектора в файл
Ответ Создать тему
Опции темы

Текущее время: 06:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru