В лабе нужно реализовать класс "Разреженный массив", вот файл SparseArr.h:| Код | #include <list>
#include <string>
#include <sstream>
using namespace std;
//---------------------------------------------------------------------------
template <class DataT> class SA_item {
public: SA_item() : index(-1), info(DataT()) {}
SA_item(long i, DataT d) : index(i), info(d) {}
long index;
DataT info; };
//---------------------------------------------------------------------------
template <class T> class SparseArr {
public:
SparseArr(long len) : length(len) {};
T& operator [](long ind);
string Show();
private:
std::list<SA_item<T> > arr;
long length;
};
//---------------------------------------------------------------------------
template <class T> T& SparseArr<T>::operator[](long ind) {
if ( (ind < 0) || (ind > length - 1) ) {
SA_item<T> temp; return temp.info;
}
list<SA_item<T> >::iterator i = arr.begin(); list<SA_item<T> >::iterator n = arr.end();
for (i; i != n; ++i) if (ind == i->index) return i->info;
arr.push_back(SA_item<T>(ind, T())); i = arr.end(); return (--i)->info;
}
/* Метод Show - для вывода разреженного массива: */
template <class T> string SparseArr<T>::Show() {
stringstream Buffer;
list<SA_item<T> >::iterator i = arr.begin();
list<SA_item<T> >::iterator n = arr.end();
for (i; i != n; ++i) Buffer << i->info << '\t';
return Buffer.str();
} |
Проблема в том, что метод Show работает только для простых типов:| Код | void main(){ SparseArr<double> Numbers(2000000);
Numbers[0] = 1.1; Numbers[38225] = 1.2; Numbers[2004056] = 1.3; Numbers[1999999] = 1.4; } |
Если я применяю метод Show для типа Student, то вылазит ошибка: "Оператор << не применим к типу stringstream с аргументом типа Student". В чем ошибка?
| Код | class Student {
public:
char Shifr[100]; char Fam [100]; char Name [100]; char Otch [100]; char Ball[100];
}; |
|