Strona 1 z 1
[C++]Przekazywanie wektora do funkcji.
: 31 paź 2009, 22:56
autor: pawegio
Witam,
aby przekazać wektor do funkcji używa się operatora adresu i wygląda to tak:
Co jeśli chcę przekazać do funkcji tablice wektorów, np. vector<int> tab[200000] ?
1).
2).
Kod: Zaznacz cały
funkcja(vector<vector <int>&>& tab) {
...
}
3).
Żadna z tych trzech opcji nie działa. Jak to zaimplementować?
Odp: [C++]Przekazywanie wektora do funkcji.
: 31 paź 2009, 23:43
autor: beluosus
Priorytety operatorów kłaniają się.
Odp: [C++]Przekazywanie wektora do funkcji.
: 31 paź 2009, 23:50
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;
}
Odp: [C++]Przekazywanie wektora do funkcji.
: 01 lis 2009, 00:06
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);
}
Odp: [C++]Przekazywanie wektora do funkcji.
: 01 lis 2009, 00:13
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...
Odp: [C++]Przekazywanie wektora do funkcji.
: 01 lis 2009, 00:20
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ś).
Odp: [C++]Przekazywanie wektora do funkcji.
: 02 lis 2009, 18:40
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.
Odp: [C++]Przekazywanie wektora do funkcji.
: 02 lis 2009, 23:13
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)).
Odp: [C++]Przekazywanie wektora do funkcji.
: 03 lis 2009, 14:25
autor: mikolajs
A nie lepiej zamiast: vector<int> d[200000];
konsekwentnie vector<vector<int> > d;