Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // taul_d.cpp -esimerkki dynaamisesta taulukosta
- #include <iostream>
- using std::cout;
- using std::ostream;
- using std::endl;
- #include <sstream>
- using std::ostringstream;
- /**
- * Luokka dynaamiselle int-taulukolle
- * @code
- * <pre name="test">
- * ostringstream ss;
- * cTaulukko luvut(10);
- * ss << luvut; ss.str() === "";
- * luvut.lisaa(0); luvut.lisaa(2); luvut.lisaa(2);
- * luvut.lisaa(4); luvut.lisaa(2);
- * ss << luvut; ss.str() === "0 2 2 4 2 "; ss.str("");
- * cTaulukko taul;
- * taul.sijoita(luvut);
- * ss << taul; ss.str() === "0 2 2 4 2 "; ss.str("");
- * taul.lisaa(99);
- * luvut.lisaa(88);
- * ss << taul; ss.str() === "0 2 2 4 2 99 "; ss.str("");
- * ss << luvut; ss.str() === "0 2 2 4 2 88 "; ss.str("");
- * </pre>
- * @endcode
- */
- class cTaulukko {
- std::size_t max_koko;
- std::size_t lkm;
- int *alkiot;
- int vika;
- public:
- cTaulukko(int akoko = 0) {
- vika = 0;
- max_koko = 0;
- alkiot = new int[akoko]; // new delete // new [] - delete []
- if (alkiot) max_koko = akoko;
- lkm = 0;
- }
- ~cTaulukko() { if (max_koko != 0) delete[] alkiot; max_koko = 0; }
- // Pitää olla jokaisessa luokassa jossa on "dynaamista tavaraa"
- void sijoita(const cTaulukko &t) {
- if (max_koko < t.lkm) max_koko = t.lkm;
- for (int i = 0; i < t.lkm; i++)
- {
- lisaa(t[i]);
- }
- }
- cTaulukko &operator=(const cTaulukko &t) { sijoita(t); return *this; }
- cTaulukko(const cTaulukko &t) { sijoita(t); } // Copy Constructor
- int operator[](int i) const {
- if (0 <= i && i < lkm) return alkiot[i];
- return 0;
- }
- int &operator[](int i) {
- if (0 <= i && i < lkm) return alkiot[i];
- return vika;
- }
- int lisaa(int luku) {
- if (lkm >= max_koko) return 1;
- alkiot[lkm] = luku;
- lkm++;
- return 0;
- }
- ostream &tulosta(ostream &os = cout) const;
- int lisaa(std::initializer_list<int> lista) {
- for (int luku : lista) if (lisaa(luku)) return 1;
- return 0;
- }
- };
- ostream &cTaulukko::tulosta(ostream &os) const
- {
- int i;
- for (i = 0; i < lkm; i++)
- os << alkiot[i] << " ";
- // os << endl;
- return os;
- }
- ostream &operator<<(ostream &os, const cTaulukko &t) { return t.tulosta(os); }
- int main(void)
- {
- cTaulukko luvut(7);
- luvut.lisaa(0); luvut.lisaa(2);
- cout << luvut << endl; // 0 2
- cTaulukko taul;
- taul.sijoita(luvut); // tai jopa taul = luvut;
- cout << taul << endl; // tulostaa saman kuin edellä
- cTaulukko t0;
- cout << t0 << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement