2016-06-16 4 views
-2

나는 벡터 배열을 정의하고이 배열을 함수에 전달하려고합니다. ?벡터 배열을 함수에 전달하는 방법

void gridlist(std::vector<int> *grid, int rows, int cols){ 
    ..... } 

int rows=4; 
int cols=5; 
std::vector<int> grid[rows][cols]; 

gridlist(grid,rows,cols); 

함수에 배열을 전달하는 나를 위해 일했다 유일한 방법은 (*) 포인터이었다

여기 내 코드입니다.

다음 설명에 따라 다른 방법을 시도했습니다. Passing a 2D array to a C++ function,하지만 제대로 작동하지 못했습니다.

could not convert '(std::vector<int> (*)[cols])(& grid)' from 'std::vector<int> (*)[cols]' to 'std::vector<int>' 
     gridlist(grid,rows, cols); 

가 내가 뭘 잘못 알고하지 않습니다

나는 항상 다음과 같은 오류가 발생합니다. 일반적으로 그 작업을 수행하는 가장 안전하고 안전한 방법은 무엇입니까? VLA (가변 길이 배열) C++에서 비 표준 때문이다

template<int rows, int cols> 
void gridlist(std::vector<int> (&grid)[rows][cols]){ 

} 

int main() 
{ 
const int rows=4; 
const int cols=5; 
std::vector<int> grid[rows][cols]; 

gridlist(grid); 
} 

코드에서 추가 변화가, int rows=4;const int rows=4;에 :

+3

벡터의 벡터 또는 'std :: array'벡터를 사용하는 것이 좋습니다. – MikeCAT

+1

좋은 별 2 개 프로그래머가 std :: vector ** grid를 사용하여 시도 했습니까, 아니면 배열 크기를 유형 매개 변수로 전달 하시겠습니까? – lorro

+0

벡터 벡터를 전달하지 않는 이유는 무엇입니까? –

답변

0

당신은 템플릿을 사용할 수 있습니다. std::vector<std::vector<std::vector<int>>>

0
void gridlist(std::vector<int> *grid, int rows, int cols){ 
    ..... } 

int rows=4; 
int cols=5; 
std::vector<int> grid[rows][cols]; 

gridlist(grid,rows,cols); 
여기

grind는 유형 std::vector<int>[][]을 가지고, grindlist()std::vector<int> *을 기대하면서 : 당신은 동적 배열은 다음 대신 벡터 (whhooh)의 벡터의 벡터를 사용하는 것을 고려합니다. 당신은에있는 하나 grindlist()std::vector<int>[] *을 기대하거나 grind이 있는지 확인해야 거라고 std::vector<int>[]

내가 대신 std::array<>을 선호하는 제안 것 :

template<int rows, int cols> 
void gridlist(std::array<std::array<std::vector<int>, cols>, rows>& grid) { 
    ..... } 

constexpr int rows = 4; 
constexpr int cols = 5; 
std::array<std::array<std::vector<int>, cols>, rows> grid; 

gridlist(grid); 
0

직접 경우 2 차원 배열을 전달할 수 없습니다 당신은 두 가지 차원의 가변 크기를 원한다. 그것은 하나의 차원의 크기를 해결하기 위해 허용하지 않은 경우

void gridlist1(std::vector<int> grid[][5],int rows){...} 

, 당신은 대신 임시 변수를 사용할 수 있습니다 :

하나의 솔루션처럼 cols의 크기를 수정하고 기능을 선언하는 것입니다

내가 사용하는 것이,

const int rows=4; 
const int cols=5; 

std::vector<int> grid[rows][cols]; 

// Temp variable 
std::vector<int>* temp[rows]; 
for (int i = 0; i < rows; ++i) temp[i] = grid[i]; 

gridlist(temp,rows,cols); 
     ^^^^ 

을하지만 :

void gridlist(std::vector<int> **grid,int rows, int cols){...} 

과 같이 호출 전통적인 c- 스타일 배열 대신 벡터의 벡터의 벡터.

+0

그게 내가 실제로 일을 계속 했어,하지만 임시 변수와 함께 해결을위한 가변 크기, 감사합니다! –

관련 문제