STL - vector #2

이승덱·2021년 7월 21일

CPP

목록 보기
48/70
#include <iostream>

#include <vector>

using namespace std;

// 오늘의 주제 : vector

int main()

{

 // vector [동적 배열]

 // - vector의 동작 원리 (size/capacity)

 // - 중간 삽입/삭제

 // - 처음/끝 삽입/삭제

 // - 임의 접근

 // 반복자(Iterator) : 포인터와 유사한 개념, 컨테이너의 원소(데이터)를 가리키고

 // 다음/이전 원소로 이동 가능

 vector<int> v(10);

 // v.size()는 unsigned int형으로 반환하기 때문에 경고가 나옴

 // 따라서 v.size()를 signed int로 캐스팅을 하거나 

 // i를 vector::size_type으로 선언

 for (int i = 0;i < static_cast<signed int>(v.size());i++) {

 v[i] = i;

 }

 //vector<int>::iterator it; // iterator 클래스는 vector클래스에서 typedef를 사용한 것과 비슷함.

 //int* ptr;

 //it = v.begin(); // v의 첫번째 주소값을 저장

 //ptr = &v[0]; // v의 첫번째 주소값을 저장

 //// ptr과 iterator의 차이

 //// iterator는 시작주소와 같이 자신이 어떤 Container의 iterator인지에 대한 정보를 가짐

 //cout << (*it) << endl; // operator연산을 이용하여 포인터처럼 활용이 가능하게 만듦

 //cout << (*ptr) << endl;

 //it++;

 //++it;

 //ptr++;

 //++ptr;

 //it--;

 //--it;

 //ptr--;

 //--ptr;

 //it += 2;

 //it = it - 2;

 //ptr += 2;

 //ptr = ptr - 2;

 vector<int>::iterator itBegin = v.begin(); // v의 시작주소를 가리킨다

 vector<int>::iterator itEnd = v.end(); // v의 끝주소에서 1을 더한 쓰레기 값을 가진 주소값을 가리킨다.

 

 // vector<int>::iterator는 auto로 치환하여 사용하는 것이 일반적이다.

 // it++ 보다 ++it가 좀 더 효율이 좋다

 // iterator는 vector뿐만 아니라, 다른 컨테이너에도 공통적으로 있는 개념

 // STL한정 통일성을 가질 수 있다.

 for (vector<int>::iterator it = v.begin();it != v.end();++it) {

 cout << (*it) << endl;

 }

 int* ptrBegin = &v[0]; //v.begin()._Ptr

 int* ptrEnd = ptrBegin + 10; //v.end()._Ptr

 for (int* ptr = ptrBegin;ptr != ptrEnd;++ptr) {

 cout << (*ptr) << endl;

 }

 // const int*

 // 값 수정 불가

 vector<int>::const_iterator cit1 = v.cbegin();

 

 // 역방향 반복자

 for (vector<int>::reverse_iterator it = v.rbegin();it != v.rend();++it) {

 cout << (*it) << endl;

 }

 return 0;

}
profile
공부 기록용 블로그입니다

0개의 댓글