Std::vector
vector는 STL에서 가장 자주 사용합니다. 프로그래밍을 할 때 가장 자주 사용하는 자료구조는 배열입니다. vector는 배열을 대체하여 사용할 수 있습니다. vector는 배열과 비슷한 면이 많아서 STL 컨테이너 중에서 이해하기가 가장 쉽고 또 어디에 사용해야 하는지 알기 쉽습니다. 앞서 연재한 list에 대한 글을 보신 분들은(또는 아시는 분들은) vector와 사용 방법이 비슷한 점이 많아서 list보다 훨씬 더 빠르게 이해하리라 생각합니다. list에서 이미 언급한 몇몇 부분은 다시 언급하지 않으니 list에 대한 글을 보지 않으신 분은 꼭 보시기 바랍니다.
2차원 배열 구현방법
참조: http://neodreamer.tistory.com/19 선언은 아래와 같이 하면 된다.
초기화 방법은 아래와 같이 for문을 사용하면 된다.
for ( int i = 0 ; i < ROW; ++i ) { // 주어진 ROW 만큼 반복
vector<int> elem; // vector 를 생성하고
elem.resize(COL); // 원하는 COL 크기로 할당
vcArray.push_back(elem); // 배열에 추가
}
각각의 ROW에 포함된 COL 데이터를 삭제하고 마지막으로 ROW 데이터를 삭제하면 된다.
아래와 같이 사용하면 하면 된다.
기존의 C API에 vector를 넘기는 방법
vector를 포인트형 배열로 바꾸는 방법 이다.
데이터에 대한 포인터를 넘기는 경우 아래와 같이 사용하면 된다.
C++ 표준에 의하면 vector 내의 데이터 요소들은 연속 메모리에 저장되도록 정해져 있다. 즉, 배열과 동일하다.
if ( !v.empty() ) {
// 빈 벡터일 때 v.size()가 0인 상황에서 &v[0]은 존재하지 않은 메모리의 주소값을 만드려고 하니 결국 오작동을 일으키게 된다.
// 따라서 v.empty()로 빈 벡터인지를 검사할 필요가 있다.
doSomething( &v[0], v.size() );
}
주의할 점은 컴파일러 종류에 따라 &v[0] 대신에 v.begin()을 쓰라는 컴파일러 경고 메시지를 볼 수 있다. 굳이 v.begin()을 쓰려면 &*v.begin() 라고 쓰면 된다.
See also
Favorite site
References
-
About_stl-cpp_stl_programming.pdf ↩