F
franklini
hello people i. can anybody help me, i dont know what is wrong with
this class. it has something to do with the me trying to override the
input output stream. if i dont override it, it works fine. i would
forget overriding it but i have to do it because its a coursework. here
is a simple version of the class
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
using namespace std;
template <typename Item>
class Sample {
private:
vector<Item> results;
public:
Sample(vector<Item> samps);
const vector<Item> get_data();
void set_data(const vector<Item> &v);
long double minimum();
long double maximum();
friend ostream& operator<<(ostream& os, const Sample& samp);
friend istream& operator>>(istream& is, Sample& samp);
};
template <typename item>
Sample<item>::Sample(vector<item> samps) : results(samps) {}
template <typename item>
const vector<item> Sample<item>::get_data(){
return results;
}
template <typename item>
void Sample<item>::set_data(const vector<item> &v) {
results = v;
}
template <typename item>
long double Sample<item>::minimum(){
long double m;
for(int i = 0; i < results.size(); i++){
if(i == 0){
m = results;
}else if(results < m){
m = results;
}
}
return m;
}
template <typename item>
long double Sample<item>::maximum(){
long double m;
for(int i = 0; i < results.size(); i++){
if(i == 0){
m = results;
}else if(results > m){
m = results;
}
}
return m;
}
template <typename item>
ostream&
operator<<(ostream& os, const Sample<item>& samp){
cout << "<" << samp.results.size() << ":";
for(int i = 0; i < samp.results.size(); i++){
cout << " " << samp.results;
}
cout << " >";
return os;
}
template <typename item>
istream&
operator>>(istream& is, Sample<item>& samp){
string s;
int count = 0;
int size;
while (is >> s){
if(count == 0 && s[0] == '<' && s[s.size()-1] == ':'){
//size = parseInt(s.substr(0,s[s.size()-2]));
size = atoi((s.substr(1,s.size()-2)).c_str());
cout << "begin size = " << size << endl;
}else if(s[s.size()-1] == '>'){
//size = parseInt(s.substr(0,s[s.size()-1]));
cout << "end " << endl;
count = 0;
break;
}else {
//size = parseInt(s.substr(0,s[s.size()-1]));
cout << count << " " << atof(s.c_str()) << endl;
samp.results.push_back(atof(s.c_str()));
}
count++;
}
return is;
}
int main(){
vector<double> a;
a.push_back(7);
a.push_back(11);
a.push_back(2);
a.push_back(13);
a.push_back(3);
a.push_back(5);
//string s;
Sample<double> samp(a);
while (cin >> samp){
cout << samp.minimum() << endl << samp.maximum() << endl;
}
cout << samp;
return 0;
}
Any help will be greatly appreciated
this class. it has something to do with the me trying to override the
input output stream. if i dont override it, it works fine. i would
forget overriding it but i have to do it because its a coursework. here
is a simple version of the class
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
using namespace std;
template <typename Item>
class Sample {
private:
vector<Item> results;
public:
Sample(vector<Item> samps);
const vector<Item> get_data();
void set_data(const vector<Item> &v);
long double minimum();
long double maximum();
friend ostream& operator<<(ostream& os, const Sample& samp);
friend istream& operator>>(istream& is, Sample& samp);
};
template <typename item>
Sample<item>::Sample(vector<item> samps) : results(samps) {}
template <typename item>
const vector<item> Sample<item>::get_data(){
return results;
}
template <typename item>
void Sample<item>::set_data(const vector<item> &v) {
results = v;
}
template <typename item>
long double Sample<item>::minimum(){
long double m;
for(int i = 0; i < results.size(); i++){
if(i == 0){
m = results;
}else if(results < m){
m = results;
}
}
return m;
}
template <typename item>
long double Sample<item>::maximum(){
long double m;
for(int i = 0; i < results.size(); i++){
if(i == 0){
m = results;
}else if(results > m){
m = results;
}
}
return m;
}
template <typename item>
ostream&
operator<<(ostream& os, const Sample<item>& samp){
cout << "<" << samp.results.size() << ":";
for(int i = 0; i < samp.results.size(); i++){
cout << " " << samp.results;
}
cout << " >";
return os;
}
template <typename item>
istream&
operator>>(istream& is, Sample<item>& samp){
string s;
int count = 0;
int size;
while (is >> s){
if(count == 0 && s[0] == '<' && s[s.size()-1] == ':'){
//size = parseInt(s.substr(0,s[s.size()-2]));
size = atoi((s.substr(1,s.size()-2)).c_str());
cout << "begin size = " << size << endl;
}else if(s[s.size()-1] == '>'){
//size = parseInt(s.substr(0,s[s.size()-1]));
cout << "end " << endl;
count = 0;
break;
}else {
//size = parseInt(s.substr(0,s[s.size()-1]));
cout << count << " " << atof(s.c_str()) << endl;
samp.results.push_back(atof(s.c_str()));
}
count++;
}
return is;
}
int main(){
vector<double> a;
a.push_back(7);
a.push_back(11);
a.push_back(2);
a.push_back(13);
a.push_back(3);
a.push_back(5);
//string s;
Sample<double> samp(a);
while (cin >> samp){
cout << samp.minimum() << endl << samp.maximum() << endl;
}
cout << samp;
return 0;
}
Any help will be greatly appreciated