cpp Vector 2
+ vector의 element 탐색
-std::vector::begin
첫번째 엘리먼트를 가리키는 이터레이터를 리턴한다.
컨테이너가 empty이면 리턴값은 dereference할 수 없다.
-std::vector::end
마지막을 지난 엘리먼트의 위치를 가리키는 이터레이터를 리턴한다.
past-the-end 엘리먼트는 벡터의 마지막 엘리먼트 뒤의 이론적 엘리먼트다. 따라서 dereference할 수 없다.
컨테이너가 empty이면 리턴값은 vector::begin의 리턴값과 같다.
ex)
std::vector<int> my ;
for (int i=1; i<=5; i++) my.push_back(i) ;
for(std::vector<int>::iterator it=my.begin(); it!=my.end(); ++it)
std::cout << " " << *it ;
my vector의 모든 엘리먼트 탐색하여 출력. 1,2,3,4,5
+ 역방향 탐색
vector::rbegin() , vector::rend()
int i=0 ;
std::vector<int> my(5) ;
std::vector<int>::reverse_iterator rit = my.rbegin() ;
for (; rit!=my.rend(); ++rit) *rit = ++i ;
출력하면 5,4,3,2,1 을 갖는다.
+첫번째 값, 마지막 값
vector::front() , vector::back()
begin(), end()는 iterator로 위치를 의미하지만, front(), back()은 위치가 아니라 엘리먼트의 값을 참조로 리턴한다.
std::vector<int> my ;
my.push_back(50) ;
my.push_back(20) ;
my.front() -= my.back() ; // 첫번째 엘리먼트에 첫번째 - 마지막 값으로 할당한다.
std::cout << my.front() << std::endl ;
첫번째 값이 30으로 변경되어 30이 출력된다.
std::vector<int> my ;
my.push_back(10) ;
while ( my.back()!=0 ) my.push_back( my.back() -1 ) ;
출력하면 10, 9, 8, ..., 2, 1, 0
+const iterator
vector::cbegin() vector::cend()
vector::crbegin() vector::crend()
begin(), end()와의 차이점은 리턴값이 const_iterator 로써 iterator를 통한 엘리먼트의 값을 변경할 수 없다. (*it=value --> compile error)
+data
value_type *data()
첫번째 엘리먼트 배열 메모리의 포인터를 리턴한다. 벡터는 엘리먼트들이 연속적인 메모리에 위치되도록 보장한다. 따라서 주소로 접근 가능.
std::vector<int> my(5) ;
int *p = my.data() ;
*p=10 ;
p++ ;
*p=20 ;
p[2]=40 ;
출력하면 10, 20, 0, 40, 0
+ [] operator
벡터의 n번째 위치의 엘리먼트를 참조로 리턴한다.
my[i] 이렇게 배열처럼 읽고 쓰기가 사용가능.
'Develop > C&CPP' 카테고리의 다른 글
Array 1 (0) | 2018.05.25 |
---|---|
Vector 3 (0) | 2018.05.23 |
Vector 1 (0) | 2018.05.16 |
정규식으로 스트링 일부 추출하기 (0) | 2018.03.10 |
gdb로 디버깅하기 (0) | 2018.03.06 |