도움받은 사이트 :

https://leeeegun.tistory.com/3

https://stackoverflow.com/questions/6946217/how-to-access-the-contents-of-a-vector-from-a-pointer-to-the-vector-in-c

 

첫번째 링크 글에서 2차원 벡터 사용법을 쉽게 익힐 수 있었다.

 

그렇게 생성한 2차원 벡터를 포인터로 넘길 일이 있었는데 뜻대로 안되어 살펴보니

포인터로 넘겨진 2차원 벡터는 행렬기호 (대괄호) 를 사용할 수 없고 at() 함수를 통해 접근해야 했다.

(위 스택오버플로우 링크 참조)

 

만약 대괄호를 계속 사용하고 싶으면  레퍼런스(Reference)로 넘겨 사용해야 한다.

 

깔끔하게 레퍼런스로 넘기면 되겠지만,

선언과 동시에 할당해야 하는 레퍼런스 특성상 사용하기 까칠한 상황이 발생했다.

 

어쨌든, 아래처럼 두가지의 경우를 정리해 본다.

#include <cstdio>
#include <vector>

using namespace std ;

int callByPointer(vector<vector<int> >* pVecData)
{
	printf("============== Call by Pointer\n") ;
	printf("Size : [%ld][%ld]\n", pVecData->size(), pVecData->at(0).size()) ;

	for(int ii = 0; ii < pVecData->size(); ii++)
	{
		for(int jj = 0; jj < pVecData->at(0).size(); jj++)
			printf("%d ", pVecData->at(ii).at(jj)) ;
		printf("\n") ;
	}
	return 1 ;
}

int callByReference(vector<vector<int> >& pVecData)
{
	printf("============== Call by Reference\n") ;
	printf("Size : [%ld][%ld]\n", pVecData.size(), pVecData[0].size()) ;

	for(int ii = 0; ii < pVecData.size(); ii++)
	{
		for(int jj = 0; jj < pVecData[0].size(); jj++)
			printf("%d ", pVecData[ii][jj]) ;
		printf("\n") ;
	}
	return 1 ;
}

int main()
{
	vector<vector<int> > vecData ;
	vector<int> vecField ;

	vecData.clear() ;
	vecField.clear() ;

	vecField.push_back(2) ;
	vecField.push_back(3) ;
	vecField.push_back(4) ;
	vecData.push_back(vecField) ;

	vecField.clear() ;
	vecField.push_back(5) ;
	vecField.push_back(6) ;
	vecField.push_back(7) ;
	vecData.push_back(vecField) ;

	printf("==============\n") ;
	printf("size : [%ld][%ld]\n", vecData.size(), vecData[0].size()) ;
	for(int ii = 0; ii < vecData.size(); ii++)
	{
		for(int jj = 0; jj < vecData[0].size(); jj++)
			printf("%d ", vecData[ii][jj]) ;
		printf("\n") ;
	}

	// by Pointer
	callByPointer(&vecData) ;

	// by Reference
	callByReference(vecData) ;
	return 1 ;
}

 

main() 함수의 출력값, callByPointer(), callByReference() 함수에서

동일하게 값을 출력함을 확인하였다.

 

+ Recent posts