인프런 커뮤니티 질문&답변
vector들의 배열을 참조로 함수에 넘겨주고 싶습니다.
작성
·
2.3K
0
DFS BFS문제를 풀때 visited 와 맵같은걸 전부 전역변수로 해서 여태까지 큰 문제가 없었는데요!
문제를 다시 풀던 중에
DFS함수에 벡터배열 vector<int> _map[9]; 같은 친구를 메인에서 선언하고 참조나 포인터로 넘기려고 하는데 빨간줄이 떠서 ??? 하구 구글링해봐도 명쾌한 해답을 얻을 수 없어서 질문 드립니다.
void DFS(int ny,int nx,vector<int> *m) {
visited[ny][nx] = 1; cnt++;
for (int i = 0; i < 4; i++) {
if (ny + dy[i] <0 || ny + dy[i] >N || nx + dx[i] <0 || nx + dx[i] >M)
continue;
else if (visited[ny + dy[i]][nx + dx[i]] == 2 && m[ny + dy[i]][nx + dx[i]] == 0)
DFS(ny + dy[i], nx + dx[i], m);
}
}
int main(){
//어쩌구 저쩌구
DFS(i, j, _map); //_map은 메인에서 선언한 배열 이름입니다.
}
}
이렇게 작성하면 전역변수로 선언한 것 처럼 잘 작동하구 문제도 맞았습니다!! 받았어요. 이걸루 벡터의 이름도 배열의 이름처럼 주소로 쓸 수 있다는것도 알았습니다 그런데요,
그런데 여기서
void DFS(int ny,int nx,vector<int> &m) {
//어쩌구 저쩌구
}
int main(){
DFS(i, j, _map); //맵은 메인에서 선언한 벡터배열 vector<int> _map[9];
}
하면 안굴러가구 참조 배열을 사용할 수 없다구 컴파일러가 불평합니다.
제 미약한 지식으로 참조하구 포인터는 내부적으로(어셈블리?)거의 같다구 들었는데요.
여기서 어떻게해야 벡터배열vector<int> _map[9]; 이친구를 참조로 넘길 수 있을까요???
문제 번호는 2-P , 14502번 연구소문제입니다!
답변 1
0
큰돌
지식공유자
안녕하세요. ㅎㅎ
vector를 함수 매개변수로 만들어 변화시키기
함수 매개변수로 넘겨서 변화시키고 싶을 때는 다음과 같이 넘기면 됩니다. call by reference로 넘겨서 수정하게 해야 합니다.
만약 vector<int> v[10] 이런꼴의 10개의 vector는 어떻게 넘길까요?
또한 2차원 vector의 경우 어떻게 넘길까요?
이렇게 넘기면 됩니다.
이렇게 하시면 됩니다. 또한 해당 부분 교안에 업데이트 되서 업로드 하도록 하겠습니다.
감사합니다.






#include<bits/stdc++.h>
using namespace std;
void f(vector<int> v[10]){
v[0][0] = 1000;
}
int main(){
vector<int> v[10];
v[0].push_back(100);
f(v);
for(int i : v[0]) cout << i << " ";
return 0;
}
// 1000