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

Zapis do wektora dwuwymiarowego

0 głosów
398 wizyt
pytanie zadane 27 października 2018 w C i C++ przez MAXIM7 Obywatel (1,990 p.)

Jeszcze jedno pytanie dotyczące wektorów. Mam wektor dwuwymiarowy vector<vector<int>> tab;. Chciałbym, aby w każdej iteracji pętli for do jego drugiego wymiaru (tab[x][y] - oznaczonego literą y) zapisywała się jakaś wartość. Wiem, że istnieje taki sposób, aby najpierw utworzyć dodatkowy wektor jednowymiarowy, do niego powpisywać wartości, a później dodać go jako całość do tego dwuwymiarowego: tab[0].push_back(nazwa wektora);, ale mi zależy na dopisywaniu w każdej iteracji bezpośrednio do tego dwuwymiarowego. Jest jakiś sposób, aby to rozwiązać?

na new int wyglądałoby to tak:

for(int i=0; i<ile; i++)
{
for(int j=0; j<n; j++)
{
tab[i][j]=x;
}
}

 

1 odpowiedź

0 głosów
odpowiedź 27 października 2018 przez RafalS VIP (122,820 p.)
wybrane 27 października 2018 przez MAXIM7
 
Najlepsza

Wystarczy stworzyć wektor tak żeby miał już przypisane wartośći:

	int n = 5, m = 10;
	vector<vector<int>> v2d(n,vector<int> (m));

Wektor jest w ten sposób wypełniony zerami i możesz z niego korzystać jak z normalnej tablicy 2d.

komentarz 27 października 2018 przez MAXIM7 Obywatel (1,990 p.)
działa, dzięki ;) Szkoda, że nie można tego robić dynamicznie, tylko z góry muszę rezerwować jakąś ilość szufladek.
1
komentarz 27 października 2018 przez RafalS VIP (122,820 p.)
edycja 27 października 2018 przez RafalS

Jasne, że można to robić dynamicznie. W końcu wektor to tablica dynamiczna, która się automatycznie powiększa. Myślałem, że pytasz jak zainicjować jakas ilość szufladek, żeby móc odwoływać się już normalnie przez kwadratowe klamry - tak jak napisałeś w przykładzie dla new.

vector<vector<int>> vec(10);

vec to wektor składający się z 10 vectorów. Na każdym z tych wektorów możesz zrobić zwykłe push_back;

vec[3].push_back(69);

Jeśli nie chcesz inicjować nic to musisz najpierw dodać szufladke w zewnętrznym wektorze a potem możesz dodawać do wewnętrznego:

vector<vector<int>> vec;
vec.push_back(vector<int>());// lub vec.emplace_back();
//dopiero teraz istnieje vec[0], wczesniej to bylby blad;
vec[0].push_back(69);

 

komentarz 27 października 2018 przez MAXIM7 Obywatel (1,990 p.)
aa oki. Myślałem, że trzeba robić tak, że najpierw tworzymy wektor jednowymiarowy, wpisuje się do niego dane, następnie tworzymy wektor dwuwymiarowy i wstawiamy do niego ten jednowymiarowy. Dziękuję za wytłumaczenie. ;)

Podobne pytania

0 głosów
1 odpowiedź 206 wizyt
pytanie zadane 27 października 2018 w C i C++ przez MAXIM7 Obywatel (1,990 p.)
0 głosów
1 odpowiedź 54 wizyt
pytanie zadane 13 stycznia w C i C++ przez Foszy Początkujący (250 p.)
0 głosów
1 odpowiedź 65 wizyt
pytanie zadane 2 kwietnia 2020 w C i C++ przez Ururka Nowicjusz (230 p.)

85,774 zapytań

134,555 odpowiedzi

298,695 komentarzy

56,666 pasjonatów

Advent of Code 2021

Top 15 użytkowników

  1. 64p. - nidomika
  2. 62p. - ScriptyChris
  3. 60p. - Whistleroosh
  4. 57p. - adrian17
  5. 55p. - CC PL
  6. 55p. - B4mbus
  7. 53p. - Klaudia
  8. 50p. - WhiskeyTaster
  9. 47p. - rucin93
  10. 45p. - tokox
  11. 44p. - Adrian Rębisz
  12. 43p. - Michał Tartanus
  13. 41p. - Jarosław Roszyk
  14. 38p. - Argeento
  15. 18p. - Marcin Harasimowicz
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...