C++에서 2차원 vector를 동적으로 할당하는 방법에 관한 질문입니다.
글쓴이: aeronova / 작성시간: 수, 2006/08/09 - 4:06오전
안녕하세요,
이번에는 vector를 이용하여 동적으로 2차원 배열의 크기를 정하는 방법에 관한 질문입니다.
일단 2차원 vector를 이용하여 matrix라는 type이 다음과 같이 정의되어 있습니다.
typedef std::vector<double> Row; typedef std::vector<Row> Matrix;
그리고 5 X 3 크기로 배열의 크기를 동적으로 할당했습니다.
(이미 size는 알고 있어서요.)
// 5 by 3 matrix Matrix matrix; matrix.reserve(5); for(int i=0;i<5;i++) { matrix[i].reserve(3); }
근데 다음과 같이 살펴보니 뭔가 이상합니다.ㅜㅜ
std::cout << matrix.size() << std::endl; std::cout << matrix[0].size() << std::endl; std::cout << matrix.capacity() << std::endl; std::cout << matrix[0].capacity() << std::endl;
결과는..
0 0 5 4294467537
일단 size가 둘다 0인 것은 이해가 갑니다. 공간만 5 X 3 으로 잡아두었지, 실제 안에 아무것도 없으니까요.
근데 이상한 것은 matrix[0].capacity()가 4294467537이 아니라 3이어야 하는데, 왜 그런지 모르겠습니다.
흠... 어떻게 해야 공간을 3으로 잡을 수 있을까요?
Forums:
matrix.size()가 0인데
matrix.size()가 0인데 matrix[0]를 써도 되나요?
reserve()는 미리
reserve()는 미리 메모리만 할당하는 것입니다.
vector에 원소를 추가하는 것이 아니므로 size는 변하지 않습니다.
reserve()와 원소 추가를 같이 하려면 resize()를 하세요.
아예 한 번에 5x3의 행렬을 만드려면 이렇게 해도 됩니다.
이 결과는 정의되지 않습니다. matrix의 원소가 없는 상태에서 matrix[0]를 썼으니까요.
감사합니다.
감사합니다. 말씀대로 resize를 사용하니 문제가 없네요.
앞으로 reserve와 resize의 차이를 잘 알고 써야 겠습니다. :)
It's better to burn out than to fade away. -- Kurt Cobain.
댓글 달기