원래 C++에서는 배열을 선언할 때 크기를 명시해야 하고 무조건 해당 크기 안에서만 사용을 해야 합니다. 그런데 vector는 일종의 가변배열로 크기를 마음대로 늘렸다 줄였다 할 수 있습니다. 참고로 vector는 vector 헤더에 선언되어있습니다
자 이제 우리가 살펴볼 것은 STL을 함수 인자로 넘길 때 어떤 일이 생기는지에 대한 것입니다. STL도 구조체랑 비슷하게 함수 인자로 실어 보내면 복사본을 만들어서 보내기 때문에 함수에서 바꾼건 원본에 영향을 주지 않습니다. 그냥 STL을 쌩으로 함수 인자에 넣으면 복사해서 보낸다는걸 꼭 유의하셔야 합니다. 이 사실을 머릿속에 넣어둡시다.
그리고 scanf를 쓰든 cin을 쓰든 주의해야 할 것이 있는데, scanf와 cin 모두 공백을 포함한 문자열을 입력받을 때 굉장히 껄끄럽습니다. 코드를 보시면 알겠지만 둘 다 공백 앞까지만 입력을 받기 때문입니다. 세 번째는 getline을 이용하는건데 이게 제일 깔끔해보입니다. 대신 이건 type이 C++ string이어야 합니다.
string s;
getline(cin,s);
cout << s;
scanf/printf와 다르게 cin/cout은 입출력으로 인한 시간초과를 막기 위해서 ios::sync_with_stdio(0), cin.tie(0)이라는 두 명령을 실행시켜야 합니다. 이걸 안해두면 입/출력의 양이 많을 때 시간초과가 날 수 있습니다. 두 명령이 뭐하는 명령인지 몰라도 상관은 없지만 그래도 알아서 나쁠건 없으니 알려드리겠습니다. cin 명령을 수행하기 전에 cout 버퍼를 비울 필요가 없다는걸 알 수 있습니다. 그래서 cin 명령을 수행하기 전에 cout 버퍼를 비우지 않도록 하는 코드가 cin.tie(nullptr)인거고, 엄밀히는 type을 지켜서 nullptr로 쓰는게 좋지만 그냥 타이핑도 아낄겸 0으로 쓰겠습니다.