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

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

Войти
Регистрация
Восстановить пароль
 
m1ster
1 / 1 / 0
Регистрация: 21.12.2011
Сообщений: 55
#1

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

14.12.2012, 22:22. Просмотров 1263. Ответов 7
Метки нет (Все метки)

можете подсказать как записать вектор структур в файл
например
есть vector<game>gamelist
game это структура с полями
int data;
string oppon;
int countplayers;

и также вопрос как обратно потом считать из файла
двоичный файл
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2012, 22:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запись в файл вектора (C++):

Запись вектора в файл - C++
Добрый вечер. Есть вектор, содержащий объекты. Мне необходимо записать его в файл, потом считать из него информацию. Как не пытался, все не...

Запись в файл из вектора - 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
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
14.12.2012, 23:04 #2
способов масса.
можно например так.
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
35
36
37
38
struct game {...};
// для структуры game пишем операторы << и >>
std::ostream& operator << (std::ostream& out, const game& game)
{
  ...
  return out;
}
std::istream& operator >> (std::istream& in, game& game)
{
  ...
  return in;
}
 
 
в коде:
 
{
  std::vector<game> games;
  ... заполняем вектор
  std::ofstream ofs("data.txt"); // нужные флажочки, бинарный не бинарный и т.п.
  для каждого элемента вектора позвать
  ofs << games[i];
}
 
{
  std::vector<game> games;
  std::ifstream ifs("data.txt"); // нужные флажочки, бинарный не бинарный и т.п.
  пока не дошли до конца стрима, вызываем оператор >>
  while (ifs) // ну или тут какая-то другая проверка должна быть на конец стрима
  {
     game g;
     ifs >> g;
     games.push_back(g);
  }
}
 
можно пользовать спец алгоритмы и не писать циклы вручную,
но с циклами вам будет наверно понятнее.
1
m1ster
1 / 1 / 0
Регистрация: 21.12.2011
Сообщений: 55
14.12.2012, 23:52  [ТС] #3
C++
1
ofs<<games[i];
вот этой строчкой мы записываем в файл структуру?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7419 / 4534 / 673
Регистрация: 29.11.2010
Сообщений: 12,308
14.12.2012, 23:57 #4
лучше всего - перегрузить оператор << и >> для структуры, а потом
C++
1
std::copy(v.begin(), v.end(), std::ostream_iterator<type> (std::cout, " "));
0
m1ster
1 / 1 / 0
Регистрация: 21.12.2011
Сообщений: 55
15.12.2012, 00:32  [ТС] #5
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
 
struct game{
    game(int d,string o):data(d),opon(o){}
    int data;
    string opon;
    friend ostream& operator << (std::ostream& out, const game& game){
        out<<game.data<<" "<<game.opon<<endl;
    return out;
    }
    friend istream& operator >> (std::istream& in, game& game){
    int dat;
    string oppon;
    in>>dat;
    in>>oppon;
    game.data=dat;
    game.opon=oppon;
        return in;
    }
 
};
 
int main()
{
 
    vector<game>gamelist;
    int s=2;
    int k=3;
    int n=0;
    string ss="GYY";
    string kk="MADI";
    game g1(s,ss);
    game g2(k,kk);
    gamelist.push_back(g1);
    gamelist.push_back(g2);
    n=gamelist.size();
    ofstream ofs("c://test.txt",ios::binary|ios::out);
    for(int i=0;i<n;n++){
        ofs<<gamelist[i];
    }
 
    ifstream ifs("c://data.txt",ios::binary|ios::in);
  while (ifs)
  {
     game g1(s,ss);
     ifs >> g1;
        cout<<g1;
     gamelist.push_back(g1);
  }
 
}
что-то не получилось,можете посмотреть правильно ли я делаю
0
MrGluck
Модератор
Эксперт CЭксперт С++
7419 / 4534 / 673
Регистрация: 29.11.2010
Сообщений: 12,308
15.12.2012, 00:49 #6
for(int i=0;i<n;i++){
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
15.12.2012, 01:22 #7
с помощью готовой библиотеки
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <string>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/serialization/vector.hpp>
#include <clocale>
#include <stdexcept>
#include <fstream>
#include <vector>
namespace ba = boost::archive;
 
struct Game
{
    int data;
    std::string opponent;
    int countplayers;
    template<typename Archive>
    void serialize(Archive& ar, unsigned const version)
    {
        ar & data;
        ar & opponent;
        ar & countplayers;
    }
};
 
std::ostream& operator<<(std::ostream& ost, Game const& g)
{
    return ost << g.data << '\n' << g.opponent << '\n' << g.countplayers;
}
 
int main ()
{
    setlocale(LC_ALL, "rus");
    try
    {
        std::vector<Game> v{{1, "op1", 10}, {2, "op2", 20}, {3, "op3", 30}}, vres;
        std::string sfilename("out.bin");
        std::fstream fs(sfilename.c_str(), std::ios::binary | std::ios::out);
        if(!fs.is_open())
            throw std::runtime_error("Unable to open output file");
        ba::binary_oarchive boa(fs);
        boa << v;
        fs.clear();
        fs.close();
        fs.open(sfilename.c_str(), std::ios::binary | std::ios::in);
        if(!fs.is_open())
            throw std::runtime_error("Unable to open input file");
        ba::binary_iarchive bia(fs);
        bia >> vres;
        fs.close();
        for(auto const& val : vres)
            std::cout << val << "\n\n";
    }
    catch(std::exception const& e)
    {
        std::cerr << "Exception: " << e.what() << std::endl;
    }
    return 0;
}
1
Миниатюры
Запись в файл вектора  
m1ster
1 / 1 / 0
Регистрация: 21.12.2011
Сообщений: 55
15.12.2012, 19:18  [ТС] #8
C++
1
2
3
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/serialization/vector.hpp>
C++
1
namespace ba = boost::archive;
это подчеркивает и пишет не удается открыть источник файл
также подчеркивает скорее всего из-за этого ba,boa,bia
0
15.12.2012, 19:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2012, 19:18
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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