Stream to Vector

This is what I have:

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <fstream>
#include <vector>
#include <iostream>
#include <string>
using namespace std; 


int main()
{
   ifstream x;
   //ofstream y;
   string str; 

   string name, addr, email, eid, load, rate;
   unsigned int pos=0,pos2=0; 

	cout << "Opening file file.txt" << endl; 


  // y.open("file.txt");


   x.open("file.txt");
   if (!x.is_open())
   {
       cout << "Could not open file /file.txt/.\n";
       return 1;
   }

   else while(x)
   {
		pos=pos2=0;
		getline(x, str); 
		if(!x)break;
		pos2 = str.find(' ');
       name = str.substr(pos, pos2);
       pos = pos2;
		pos2 = str.find(' ',pos+1);
       name += str.substr(pos, pos2-pos);
       pos = pos2;
		pos2 = str.find(' ',pos+1);

		addr = str.substr(pos+1, pos2-pos);
       pos = pos2;
		pos2 = str.find(' ',pos+1);
       addr += str.substr(pos+1, pos2-pos);
       pos = pos2;
		pos2 = str.find(' ',pos+1);
		addr += str.substr(pos+1, pos2-pos-1);
       pos = pos2;
		pos2 = str.find(' ',pos+1);


       email = str.substr(pos+1, pos2-pos-1);
       pos = pos2;

       pos2 = str.find(' ',pos+1); 
       eid = str.substr(pos+1, pos2-pos-1);
		pos = pos2;
       pos2 = str.find(' ',pos+1); 


		load = str.substr(pos+1, pos2-pos-1);
       pos = pos2;
       rate = str.substr(pos+1);

		  cout << name << " " << addr << " " << email << " " << eid << " " << load 
              << " " << rate << endl;
   }  

   x.close();
   //y.close();






   return 0;

}



How would I approach into push_back() vector? The code I have right now is very generic and I don't know how to do the same thing with a vector. Any suggestions?
You'd need to design a class for this vector to store. Here's a simplistic struct solution:

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 <fstream>
#include <vector>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

struct S {
    string name;
    string addr;
    string email;
    string eid;
    string load;
    string rate;
};

istream& operator>>(istream& is, S& s)
{   
    string name1, name2, addr1, addr2, addr3, email, eid, load, rate;
    if(is >> name1 >> name2 >> addr1 >> addr2 >> addr3 >> email >> eid >> load >> rate)
    {   
        s.name = name1 + ' ' + name2;
        s.addr = addr1 + ' ' + addr2 + ' ' + addr3;
        s.email = email;
        s.eid = eid;
        s.load = load;
        s.rate = rate;
    }
    return is;
}

ostream& operator<<(ostream& os, const S& s)
{   
    return os << s.name << ' ' << s.addr << ' ' << s.email << ' ' << s.eid << ' ' << s.load << ' ' << s.rate;
}

int main()
{   
    cout << "Opening file file.txt\n";
    ifstream x("file.txt");
    if (!x.is_open())
    {   
        cout << "Could not open file /file.txt/.\n";
        return 1;
    }

    vector<S> v;
    string str;
    while(getline(x, str))
    {   
        istringstream buf(str);
        S s;
        if(buf >> s)
            v.push_back(s);
    }

    for(S& s: v)
        std::cout << s << '\n';
}

Topic archived. No new replies allowed.