[[TableOfContents]] == vector == * 배열을 대체할수 있는 자료구조. * include : vector {{{~cpp #include }}} === 선언과 크기 잡기 === *일반적인 선언 {{{~cpp vector ar; // int형 데이터를 넣을 vector 컨테이너 ar을 생성. ar.resize(10); // 10개로 잡는다. vector::iterator iter; // 내부의 데이터들을 순회하기 위해 필요한 반복자. vector::const_iterator i; // 벡터의 내용을 변경하지 않을 것임을 보장하는 반복자. }}} * 초기화시 데이터 넣기 {{{~cpp int data[3] = {1,2,3}; vector ar(&data[0], &data[3]); // data내의 정보가 세팅된다. }}} 질문 : 상식에 의거해서 실습 해볼 때 저 부분을 {{{~cpp vector ar( &data[0], &data[2] ); }}} 로 했더니 계속 문제가 생겨서.. 오랜 삽질끝에 &data[3] 으로 해야한다는 걸 발견 했습니다. 좀 이상한 것 같네요. {{{~cpp data[3]}}} 이라는 것은 배열의 범위를 벗어나는 연산일텐데요.. 그곳의 리퍼런스를 얻어서 생성자로 넘겨주는게.. 상식에서 거부했나 봅니다. 두번째 인자로 배열 범위를 벗어나는 값을 받는 이유를 혹시 아시는 분 계십니까? --zennith Iterator 들이나, 배열의 영역설정은 그 모호성을 배제하기 위해서, 마지막 자료형 + 1의 index 를 가지는 것을 상식으로 취급합니다. MFC, Java 등 여타 라이브러리들의 index접근 하는법 마찬가지 입니다. 익숙해 지는 수 밖에 없지 않을까요? --NeoCoin === 데이터 넣기 === {{{~cpp ar.push_back(3); // ar의 뒤쪽으로 3을 추가한다. ar[5] = 4 // 6번째에 4 넣기 }}} === 컨테이너 순회 === {{{~cpp vector::const_iterator i; // for 에서 반복자를 이용한 순회 1 for(i = ar.begin() ; i != ar.end() ; ++i) cout << *i << endl; // while 에서 반복자 이용순회 i = ar.begin(); while( i != ar.end() ) { cout << *i << endl; i++; } // for문에서 인덱스를 이용한 순회 for(int j = 0 ; j < ar.size() ; ++j) cout << ar[j] << endl; }}} === 데이터 제거 === {{{~cpp // 6번째 원소를 제거 ar.erase(ar.begin()+5); // 2~3번째 원소 제거 vector::iterator start, end; start = ar.begin() + 1; // 2번째 end = start+2; // 시작부터 2개 삭제 ar.erase( start, end); }}} === Cook Book === * ["STL/vector/CookBook"] === Example === {{{~cpp #include #include using namespace std; typedef vector vecCont; typedef vecCont::const_iterator vecIter; int main() { int ar[] = {32,54,654,765,34,4645625}; vecCont nums(&ar[0], &ar[6]); for(vecIter i = nums.begin() ; i != nums.end() ; ++i) cout << *i << endl; for(int j = 0 ; j < nums.size() ; ++j) cout << nums[j] << endl; return 0; } }}} === 벡터 비우기 === * 아래와 같은 방법으로 벡터 내용을 통째로 지운다. {{{~cpp m_inputMessage.~vector(); new ( &m_inputMessage ) vector(); }}} ---- See Also ["STL/VectorCapacityAndReserve"] ---- ["STL"]