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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
dima55501
30 / 34 / 6
Регистрация: 14.07.2013
Сообщений: 146
#1

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

22.01.2014, 18:55. Просмотров 412. Ответов 7
Метки нет (Все метки)

Добрый вечер. Есть вектор, содержащий объекты. Мне необходимо записать его в файл, потом считать из него информацию. Как не пытался, все не получается, прошу помочь. Вот накидал простенький пример, объясните на нем, пожалуйста.
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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2014, 18:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запись вектора в файл (C++):

Запись в файл вектора - C++
можете подсказать как записать вектор структур в файл например есть vector&lt;game&gt;gamelist game это структура с полями int data; ...

Запись в файл из вектора - C++
ofstream outfile(&quot;ITER.txt&quot;); ostream_iterator&lt;int&gt; Co(outfile,&quot; &quot;); copy(v1.begin(),v1.end(),Co); Есть вектор заполненый...

Запись в бинарный файл вектора - C++
есть вектор typedef struct Point { double x; double y; Point(double x_, double y_) : x(x_), y(y_) {} ...

Запись вектора стуктур в файл - C++
имеется вектор структур struct bb{ string letter; vector&lt;string&gt; word; }; vector&lt;bb&gt; base; как записать её в файл, чтобы...

Запись вектора в бинарный файл - C++
Здравствуйте, не получаеться написать нормальную запись в файл вектора из обьектов класа. Вот сам клас: public class Human { ...

Запись в файл вектора обьектов - C++
Здравствуйте, уважаемые форумчане. Есть такое задание. 2 класса(Figure, Square). Figure - базовый клас, с виртуальными методами...

7
ValeryS
Модератор
6651 / 5060 / 470
Регистрация: 14.02.2011
Сообщений: 16,918
22.01.2014, 19:00 #2
Цитата Сообщение от dima55501 Посмотреть сообщение
out.write(reinterpret_cast<char *>(&vec), sizeof(vec));
вот здесь ты записываешь в файл указатели на свои элементы
а нужно достать каждый элемент и записать его в файл
примерно так
0
MrGluck
Модератор
Эксперт CЭксперт С++
7278 / 4439 / 650
Регистрация: 29.11.2010
Сообщений: 12,017
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 должен быть определен оператор >>
1
dima55501
30 / 34 / 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;
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
7278 / 4439 / 650
Регистрация: 29.11.2010
Сообщений: 12,017
22.01.2014, 19:17 #5
Цитата Сообщение от MrGluck Посмотреть сообщение
std::ostream_iterator<Test>
Цитата Сообщение от dima55501 Посмотреть сообщение
ругается на ostreambuf_iterator
найдите отличия
0
dima55501
30 / 34 / 6
Регистрация: 14.07.2013
Сообщений: 146
22.01.2014, 19:23  [ТС] #6
MrGluck, да, точно. Сейчас исправил, но все равно не компилируется, пишет что " бинарный "<<": не найден оператор, принимающий правый операнд типа "const Test" (или приемлемое преобразование отсутствует)". Я его может перегрузил неправильно?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7278 / 4439 / 650
Регистрация: 29.11.2010
Сообщений: 12,017
22.01.2014, 19:27 #7
dima55501,
C++
1
ostream &operator<<(ostream &stream, const Test &obj)
1
dima55501
30 / 34 / 6
Регистрация: 14.07.2013
Сообщений: 146
22.01.2014, 19:28  [ТС] #8
MrGluck, спасибо большое
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2014, 19:28
Привет! Вот еще темы с ответами:

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

Запись вектора в бинарный файл. - C++
Ребят помогите кто сделать запись в бинарный файл ,а не в текстовый(как в данном коде ) , а то не выходит как то ! заранее спасибо ! ...

Запись вектора строк в бинарный файл - C++
Помогите пожалуйста. Компилируется отлично, без ошибок и варнингов, но при запуске выдает ошибку. уже не знаю как быть. не понятно какая...

Запись в бинарный файл двумерного строкового вектора и его считывание - C++
Ну ни в какую не могу понять эту работу с файлами( В чем проблема? Заранее спасибо #include &lt;iostream&gt; #include &lt;fstream&gt; ...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
22.01.2014, 19:28
Ответ Создать тему
Опции темы

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