1. 기본 함수
reserve 와 resize의 차이.
reserve는 vector의 용량을 늘리는 것으로 적절한 필요 공간을 알경우 새로운 저장 공간 재할당을 막을 수 있으니 잘 사용하자.
실제 값이 할당되는 것은 아니다. 이지 크기가 더 큰 경우에는 용량을 줄여도 허용되지 않는다.
resize는 vector의 크기을 조정하는데 reserve와는 이미 값을 있는 경우에 값을 삭제해 버리니 주의해야 한다.
operator[](size_t n)
지정된 위치의 요소를 참조로 반환한다. 즉 값을 변경할 수 있다.
iterator
STL container 를 순회할 때는 반복자를 쓰는게 좋다.
for(std::vector<int>::iterator iter = scores.begin(0; iter != scores.end(); ++iter)
{
std::cout << *iter << " ";
}
루프를 거꾸로 돌 경우에는 rbegin(), rend() 를 사용한다.
insert
값을 삽입할 수 있다. 아래와 같이 하면 첫번째로 80 이 삽입된다.
std::vector<int>::iterator it = scores.begin();
it = scores.insert(it, 80);
assign
입력값을 연속으로 대입한다. 아래와 같이 하면 숫자 100 이 7개가 추가된다.
vector<int> scores;
scores.assign(7, 100);
swap
두 vector의 값을 서로 교환할 수 있다.
vector<int> scores1;
...
vector<int> scores2;
...
scores1.swap(scores2);
clear
vector를 지운다. 크기는 0이 되지만 용량은 줄이지 않는다.
erase
특정 iterator에 있는 값을 삭제한다.
*iterator
iterator 의 값을 얻을 수 있다. iterator 자체는 포인터 처럼 사용할 수 있다.
2. 사용
- vector 에 개체를 직접 보관할 경우 메모리 복사 발생 시 비용이 높아지게 됨으로 포인터를 저장하는 것이 일반적이다. 물론 이때 메모리 해제를 관리해야 한다.
vector<Score*> scores;
...
for(Score* pScore : scores)
{
delete pScore;
}
scores.cleare();