• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Samodzielne pisanie wektora

Object Storage Arubacloud
0 głosów
102 wizyt
pytanie zadane 10 grudnia 2016 w C i C++ przez niezalogowany

Zadanie:

Piszemy klasę do przechowywania nieskończonej ilości liczb typu double. Zauważmy, że zwykła tablica, statyczna bądź dynamiczna, zawsze ma ograniczoną ilość elementów. Jednym z rozwiązań pozwalających na obejście tego problemu jest tzw. “wektor”. Wektor jest strukturą danych zawierającą dynamicznie tworzoną tablicę, która działa w ten sposób, że w momencie gdy wstawiany jest ostatni element tablicy, jej rozmiar zwiększa się dwukrotnie. Przykład: 1) Tworzymy nowy obiekt typu wektor → mamy tablicę jednoelementową: [0] 2) Dodajemy liczbę na jedno jedyne miejsce [0] → tablica jest 2x rozszerzana: [0][1] 3) Dodajemy liczbę na miejsce [1] → tablica jest 2x rozszerzana: [0][1][2][3] 4) Dodajemy liczbę na miejsce [2] → nie ma potrzeby rozszerzania: [0][1][2][3] 5) Dodajemy liczbę na miejsce [3] → znowu rozszerzamy 2x: [0][1][2][3][4][5][6][7] 6) Dodajemy liczbę na miejsce [4] → nie ma potrzeby rozszerzania: [0][1][2][3][4][5][6][7] 7) Dodajemy liczbę na miejsce [6] → nie ma potrzeby rozszerzania: [0][1][2][3][4][5][6][7] Itp.

main.cpp

#include "plik.h"

using namespace std;

int main()
{
	Wektor wk;
	int a, b = 0;

	while (cin >> a)
	{
		setT(wk, a, b);
		b++;
		if (b == wk.getS())
			wk.ro();
	}

	wypisz(wk);

	system("PAUSE");
}

klasa.h

#include <iostream>
#include <fstream>

using namespace std;

class Wektor
{
	int *tab;
	int s;
public:
	Wektor() { s = 1; tab = new int[s]; }
	Wektor(int a) { tab = new int[a]; s = a; }
	~Wektor() { delete[] tab; }

	int getS() { return s; }
	void ro();

	friend void setT(Wektor& w, int a, int n);
	friend void wypisz(Wektor& w);
};

klasa.cpp

#include "plik.h"

using namespace std;

void Wektor::ro()
{
	delete[] tab;
	s *= 2;
	tab = new int[s];
}

void wypisz(Wektor& w)
{
	for (int i = 0; i < w.getS(); i++)
		cout << w.tab[i] << endl;
}

void setT(Wektor& w, int a, int n)
{
	w.tab[n] = a;
}

Pytanie:

Wiem, że muszę stworzyć tymczasową tablicę na przechowanie danych i potem uzupełnić ją nowo stworzoną tablicę obiektu poszerzoną dwa razy. W jaki sposób mógłbym to wykonać?

1 odpowiedź

–1 głos
odpowiedź 11 grudnia 2016 przez niezalogowany
wybrane 11 grudnia 2016
 
Najlepsza

Stworzyć rozszerzoną tablicę na innym wskaźniku, przekopiować dane z tej pierwszej do niej, usunąć pierwszą i przypisać wskaźnik rozszerzonej do zmiennej tab. Takie coś:

void Wektor::ro()
{
     s *= 2;
     int * temptab = new int[s];

     for(int i = 0; i < s/2; i++)  temptab[i] = tab[i];

     delete[] tab;
     tab = temptab;
}

 

Podobne pytania

0 głosów
3 odpowiedzi 164 wizyt
pytanie zadane 2 stycznia 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)
+1 głos
3 odpowiedzi 1,132 wizyt
pytanie zadane 13 kwietnia 2021 w C i C++ przez Pawolo122 Początkujący (330 p.)
0 głosów
2 odpowiedzi 471 wizyt

92,567 zapytań

141,420 odpowiedzi

319,616 komentarzy

61,953 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...