/////////////////////////////////////////////////////////// // Проект Task3_1 /////////////////////////////////////////////////////////// // SparseArr.h #ifndef SPARSE_ARR_H #define SPARSE_ARR_H #include template 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 SparseArr { public: SparseArr(long len) : length(len) {} T& operator [](long ind); void Show(const char*); private: std::list > arr; long length; }; template void SparseArr::Show(const char* title) { cout << "===== " << title << " =====\n"; list >::iterator i = arr.begin(); list >::iterator n = arr.end(); for (i; i != n; ++i) cout << i->index << "\t" << i->info << endl; } template T& SparseArr::operator[](long ind) { if ((ind < 0) || (ind > length-1)) { cerr << "Error of index: " << ind << endl; SA_item temp; return temp.info; } list >::iterator i = arr.begin(); list >::iterator n = arr.end(); for (i; i != n; ++i) if (ind == i->index) return i->info; // элемент найден // Элемент не найден, создаем новый элемент arr.push_back(SA_item(ind, T())); i = arr.end(); return (--i)->info; } #endif /* SPARSE_ARR_H */ /////////////////////////////////////////////////////////// // Main.cpp #include #include #include "SparseArr.h" using namespace std; int main() { SparseArr sa1(2000000); // 1 sa1[127649] = 1.1; // 2 sa1[38225] = 1.2; // 3 sa1[2004056] = 1.3; // 4 sa1[1999999] = 1.4; // 5 sa1.Show("sa1"); // 6 cout << "sa1[38225] = " << sa1[38225] << endl; // 7 sa1[38225] = sa1[93]; // 8 cout << "After the modification of sa1:\n"; // 9 sa1.Show("sa1"); // 10 SparseArr sa2(1000); // 11 sa2[333] = "Nick"; // 12 sa2[222] = "Peter"; // 13 sa2[444] = "Ann"; // 14 sa2.Show("sa2"); // 15 sa2[222] = sa2[555]; // 16 sa2.Show("sa2"); // 17 return 0; } //-------------- конец проекта Task3_1 ---------------- //////////////////////////////////////////////////////////