[C++]Przekazywanie wektora do funkcji.

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
pawegio
Sędziwy Jeż
Sędziwy Jeż
Posty: 31
Rejestracja: 20 sie 2009, 11:17
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

[C++]Przekazywanie wektora do funkcji.

Post autor: pawegio »

Witam,
aby przekazać wektor do funkcji używa się operatora adresu i wygląda to tak:

Kod: Zaznacz cały

funkcja(vector<int>& tab) {
        ...
}
Co jeśli chcę przekazać do funkcji tablice wektorów, np. vector<int> tab[200000] ?

1).

Kod: Zaznacz cały

funkcja(vector<int>& tab[]) {
        ...
}
2).

Kod: Zaznacz cały

funkcja(vector<vector <int>&>& tab) {
        ...
}
3).

Kod: Zaznacz cały

funkcja(vector<int>& tab[200000]) {
        ...
}
Żadna z tych trzech opcji nie działa. Jak to zaimplementować?
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [C++]Przekazywanie wektora do funkcji.

Post autor: beluosus »

Priorytety operatorów kłaniają się. :)

Kod: Zaznacz cały

funkcja(vector<int> (tab)[])
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
pawegio
Sędziwy Jeż
Sędziwy Jeż
Posty: 31
Rejestracja: 20 sie 2009, 11:17
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [C++]Przekazywanie wektora do funkcji.

Post autor: pawegio »

Ok problem ominąłem chyba, ale dzięki za radę na przyszłość, jednak teraz pojawia się teraz inny problem. Wyskakuje to moje ulubione Segmentation fault przy takim kodzie:

Kod: Zaznacz cały

#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

int n,m,a,b;
vector<int> d[200000];
vector<int> V;

void bfsGo(int start) {
    queue<int> q;
    V[start] = 1;
    q.push(start);
    while (!q.empty()) {
        int u;
        u = q.front();
        q.pop();
        for (int i = 0; i < n; ++i)
            if (d[u][i] && !V[i]) {
                V[i] = 1;
                q.push(i);
            }
    }
}

void bfs() {
    for (int i = 0; i < n; ++i)
        if (!V[i]) {
             bfsGo(i);
        }
}

int main() {
	scanf("%d %d",&n,&m);
	V.clear(); V.resize(n,0);
	for(int i=0;i<m;i++) {
		scanf("%d %d",&a,&b);
		d[b].push_back(a);
		d[a].push_back(b);
	}

	bfs();

	return 0;
}
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [C++]Przekazywanie wektora do funkcji.

Post autor: beluosus »

Nie bardzo chce mi się analizować, bo to strasznie pokręcone jest ale w tym miejscu najwyraźniej odwołujesz się do nieistniejącego elementu:

Kod: Zaznacz cały

        for (int i = 0; i < n; ++i)
            if (d[u][i] && !V[i]) {
                V[i] = 1;
                q.push(i);
            }
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
pawegio
Sędziwy Jeż
Sędziwy Jeż
Posty: 31
Rejestracja: 20 sie 2009, 11:17
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [C++]Przekazywanie wektora do funkcji.

Post autor: pawegio »

a jak w tym wypadku przekazać wielkość tablicy d do tej funkcji? Bo już po paru debugach widzę gdzie tkwi błąd...

EDIT: Ok, już wiem...
luzakwielki
Wytworny Kaczor
Wytworny Kaczor
Posty: 264
Rejestracja: 19 lis 2008, 11:42
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: KDE Plasma
Architektura: x86_64

Odp: [C++]Przekazywanie wektora do funkcji.

Post autor: luzakwielki »

pawegio pisze:a jak w tym wypadku przekazać wielkość tablicy d do tej funkcji? Bo już po paru debugach widzę gdzie tkwi błąd...

Dać wielkość jaką może mieć, a nie pisać poza zaalokowaną pamięcią (puść debug i sprawdź jakie jest "u" i "i" w "d" i czy nie jest większe niż zaalokowałeś).
pawegio
Sędziwy Jeż
Sędziwy Jeż
Posty: 31
Rejestracja: 20 sie 2009, 11:17
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [C++]Przekazywanie wektora do funkcji.

Post autor: pawegio »

problem rozwiązany, bfs który napisałem pasowałby do tablicy dwuwymiarowej jako grafu, ale nie do tablicy wektorów, gdzie graf trochie inaczej się reprezentuje... Umnknął mi ten fakt i te dwie struktury potraktowałem jako identyczne.
luzakwielki
Wytworny Kaczor
Wytworny Kaczor
Posty: 264
Rejestracja: 19 lis 2008, 11:42
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: KDE Plasma
Architektura: x86_64

Odp: [C++]Przekazywanie wektora do funkcji.

Post autor: luzakwielki »

pawegio pisze:problem rozwiązany, bfs który napisałem pasowałby do tablicy dwuwymiarowej jako grafu, ale nie do tablicy wektorów, gdzie graf trochie inaczej się reprezentuje... Umnknął mi ten fakt i te dwie struktury potraktowałem jako identyczne.
To nie dwie struktyry, a jedna (wektor z c++ to rozszerzalna tablica (gdy chcesz więcej wepchać więcej danych do tablicy niż zaalokowałeś robi realloc tablicy)).
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: [C++]Przekazywanie wektora do funkcji.

Post autor: mikolajs »

A nie lepiej zamiast: vector<int> d[200000];
konsekwentnie vector<vector<int> > d;
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 5 gości