#include <iostream>

#include <vector>

using namespace std;


int main() {


vector<int> vector1;

vector1.push_back(20); // 자동완성 푸시백밖에 없음

vector1.push_back(30); // 문제없음

//vector1.push_front <-- 문제생김

/*

그러면 앞에 첫번째 데이터 넣으려면, 인설트 써야함

첫번째 포지션, 위치를 알아와야함, 이터레이터 쓴다

*/


cout << "First Insert Test" << endl;

vector<int>::iterator iterInsertPos = vector1.begin();

// 첫번째 위치받아온다.

vector1.insert(iterInsertPos, 100);

//예상 출력 100 20 30


/*

//앞에서는, 이렇게 해줫는데 포문안에다 한번에 써도됨

vector<int>::iterator iterEnd = vector1.end();


for(vector<int>::iterator iterPos = vector1.begin();

iterPos !=iterEnd; iterPos++)

*/


for (vector<int>::iterator iterPos = vector1.begin();

iterPos != vector1.end(); iterPos++) // 이렇게 해도됨

{

//얘는 포인터 같은거라 앞에 *붙혀줘야함

cout << "vector1: " << *iterPos << endl;

}


cout << "Second Insert Test" << endl;

/*

아이템을 더 넣어보자

아래는 비긴 위치가 아니라 두번째 위치가 된다.

*/


iterInsertPos = vector1.begin();

++iterInsertPos; 


//두번째 위치에다가

// 파라미터가 더 늘어나면, 첫번째 이터레이터 위치에

// 200이라는 아이템을 2개 넣어라 에요

// 아까 100 20 30 이었잖아요, 그러면 100 200 200 20 30

//출력된다.

vector1.insert(iterInsertPos, 2, 200);


for (vector<int>::iterator iterPos = vector1.begin();

iterPos != vector1.end(); iterPos++)

{

cout << "vector1: " << *iterPos << endl;

}


cout << "Third Insert Test" << endl;


vector<int> vector2; // 벡터2라는 컨테이너 하나 더 만듬

vector2.push_back(1000);

vector2.push_back(2000);

vector2.push_back(3000); // 1000 2000 3000 일 것

iterInsertPos = vector1.begin(); // 벡터 1의 시작위치

    

/*

요 위치에다가(iterInsertPos) vector2.begin 부터 end까지

전위연산자, 요라인 실행할때 비긴이 아니라 다음위치

*/

vector1.insert(++iterInsertPos, vector2.begin(), vector2.end());

for (vector<int>::iterator iterPos = vector1.begin();

iterPos != vector1.end(); iterPos++)

{

cout << "vector1: " << *iterPos << endl;

}


/*

그래서 이대로 실행해보면, 아까 ++가 들어갔으니깐

100 200 200 20 30 그 사이에 인설트가 됨 벡터2

만약 전위 안쓰고 후위 연산자 쓰면, iterInsertPos++

증감 되는게 저라인 끝나고 실행됨

1000 2000 3000 100 200 ...

벡터를 , 하나의 벡터에 다른 벡터를 인설트 해줄 수

있습니다.

그다음에, 랜덤어세스가 가능했엇죠 배열처럼, 리스트는 안됨

순서상 3번째 2000 출력해보자 , [2]

리스트는 요게 안됨, 빠름, 바로 접근하거나 그게

이터레이터 안써도 되기때문에, 컨테이너 뭐가 더 좋다

그런 정답은 없다.

*/


cout << "Random Access[2]: " << vector1[2] << endl;

}


벡터에서 엘레먼트 접근할때 랜덤 억세스라고 하던데

왜 랜덤억세스임?

지정 억세스 같은데