[C++] Tablice

Mam taki problem potrzebuje tablic int o liczbie elementow 1000 000 ale mi wywala blad, ze za duza wartosc jak sobie z tym poradzic?

Alokujesz dynamicznie?

Nie, wpisane na stale

No ja bym robił to na vectorach, a nie na tablicach.

#include 

#include 

using namepspace std;


int main(){

   vector v(1000000);

   return 0;

}

Albo jeżeli nie potrzebujesz już wcześniej stworzonej, to na bieżąco dodawał. Wtedy zamiast vector v(1000000); - vector v; i jak wczytujesz dane robić np:

int a;

scanf("%d", &a); //jeżeli scanf, to jeszcze biblioteka cstdlib

v.push_back(a);

:wink:

Na stosie (czyli zadeklarowana w środku funkcji) na pewno o wiele za dużo.

Jako zmienna globalna będzie ok.

Vektor moze byc dwuwymiarowy? Bo jesli dziala tak samo jak tablica to wsumie bezroznicy.

Up Masz racje jest ok ale int a[1000000][1000000]; dalej zaduze :frowning:

vector może być nawet 1000-wymiarowy.

vector > V2;

v.push_back(a); tak jest dla jednowymiarowego, a dla dwu?

v[indeks].push_back(val)?

   vector<vector<int> > v;

Próbujesz stworzyć zmienną o rozmiarze 4 terabajtów - dziwisz się? Co tak naprawdę próbujesz zrobić? Bo ewidentnie rozwiązanie, które sobie wymyśliłeś, jest błędne.

Jeżeli masz potrzebę przechowywania tak dużych tablic to na pewno zachodzi przynajmniej jedno z:

  1. [*:toovwyp0]Źle skonstruowałeś algorytm[*:toovwyp0]Tablica jest baaardzo rzadka i można ją przechować w strukturze

    struct Dane { unsigned y,x; int wartosc; }; vector v; [/code]

Przechowując na tej liście tylko niezerowe wartości.

Czyli jesli uzywam vectorow to w ogole nie musze deklarowac rozmiaru bo same w razie potrzeby sie rozszerzaja?

Same się nie rozszerzają, trzeba wywołać metodę resize() lub push_back().

Mam jeszcze jedno pytakno dotyczace tablic/vectorow. Jak sprawdzic czy tablica a jest zawarta(jest jej elementem) w tablicy b

Dla każdego elementu tablicy a sprawdzić jeżeli rozmiar a_==rozmiar b to posortować a , posortować b, jeżeli dla wszystkich k a [k]==b[k] to a__==b._

Z tym że podejrzewam niepoprawne zrozumienie zadania.

Prawdopodobnie chodziło o to czy każdy element z tablicy b istnieje w tablice a.

Tak, to niemusza byc identyczne tablice. To jest coś jak czy zbiór elementów A jest podzbiorem zbioru B

Jakby sie dalo zrobic tak samo na vektorach: część współna z A i B =A i jesli to by byla prawda to A jest podzbiorem B

A ja ponowię pytanie: co dokładnie chcesz zrobić? Bo rozwiązanie na tablicach zdaje się nie być optymalne.

Mam dane w vectorach i tak jak napisalem wyzej

Mam vector a ktorego elementami sa np 1,2,5,5,3 i vector b 1,6,2,8,4,5,3,5 no i teraz jak sprawdzic czy a jest podzbiorem b (w tym wypadku jest)

Robisz kopie vector’a b np. B , próbujesz usunąć z po kolei B wszystkie elementy zawarte w a , jeżeli nie udało się usunąć kolejnego elementu ze zbioru B (nie ma takiego) to a nie jest podzbiorem b. Jeżeli udało się usunąć wszystkie to a jest podzbiorem b.