벡터
Coddy의 C++ - 표준 템플릿 라이브러리 코스 레슨. 23개 중 5번째.
C++ STL의 Vector는 기본적으로 동적 크기 배열입니다. 요소가 삽입되거나 제거될 때 자동으로 크기를 조정하는 기능이 있습니다. 벡터 요소는 연속된 저장 공간에 저장되므로, 반복자(iterator)를 사용하여 접근, 수정 및 순회할 수 있습니다.
벡터에서 데이터는 뒤쪽에서 삽입됩니다. 배열보다 느린 데이터 구조이지만, 벡터는 경쟁력 있는 대회 수준의 복잡도에서도 문제 해결에 사용될 수 있을 만큼 충분히 빠릅니다.
C++의 벡터는 상단에 #include <vector>를 포함하여 구현됩니다.
!참고: C++에는 bits/stdc++.h라는 비표준 헤더 파일이 있습니다. 이 파일을 C++ 파일 상단에 포함하면 표준 라이브러리의 모든 요소를 개별적으로 포함할 필요 없이 사용할 수 있습니다. (#include <bits/stdc++.h>)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
// Code...
return 0;
}#include <bits/stdc++.h>
using namespace std;
int main()
{
// Code...
return 0;
}그렇다면 vector를 어떻게 생성하고, 초기화하고, 사용할까요? 우리는 vector<> 키워드를 사용합니다. <> 안에는 벡터 내부에 저장할 요소의 데이터 타입인 변수 타입을 넣습니다. 정수를 저장할 벡터를 선언하려면 vector<int>를 사용합니다.
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> numbers = {1, 2, 3};
cout << numbers[0];
return 0;
}Output:
1위에서 볼 수 있듯이, 벡터는 배열과 똑같이 동작합니다. int 타입의 numbers라는 이름의 벡터를 선언하고 몇 가지 값으로 초기화했습니다. 그런 다음 대괄호 []를 사용하여 첫 번째 요소인 인덱스 0의 요소를 출력했습니다.
push_back() 함수를 사용하여 벡터의 뒤쪽에 요소를 삽입합니다. push_back() 메서드는 벡터의 마지막 요소 뒤에 새로운 요소를 추가합니다.
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> numbers = {1, 2, 3};
cout << numbers[2] << endl;
numbers.push_back(10);
cout << numbers[3];
return 0;
}Output:
3
10보시다시피, 벡터 이름 뒤에 점 .을 찍고 메서드를 사용합니다. push_back() 메서드를 사용한 후 벡터의 크기는 1만큼 증가합니다.
또한 벡터가 가진 요소의 개수를 얻기 위해 사용할 수 있는 size() 메서드도 있습니다.
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> numbers = {1, 2, 3};
cout << numbers.size();
return 0;
}Output:
3벡터가 가진 요소의 개수를 모르지만 전체를 순회하고 싶을 때 size() 메서드를 자주 사용하며, 루프 조건에서 vector.size()를 사용합니다.
벡터 데이터 구조에는 벡터의 크기를 n으로 조정하는 resize(n) 함수와 같은 많은 기능과 특징이 있습니다. 하지만 이러한 기능들은 알고리즘과 함수에 대해 배울 때 다시 다루기로 하고, 지금은 벡터가 동적 크기 배열이라는 점, 선언 방법, 그리고 push_back() 메서드를 사용하여 새 요소를 삽입한다는 점을 기억하세요.
예시: 다음은 사용자가 -1을 입력할 때까지 계속해서 숫자를 입력받는 예제 프로그램입니다. 요소가 몇 개가 될지 알 수 없으므로 루프와 벡터를 사용하여 저장할 것입니다.
#include <bits/stdc++.h>
using namespace std;
int main()
{
int x;
vector<int> numbers;
while(x != -1)
{
cin >> x;
numbers.push_back(x);
}
return 0;
}매 레슨마다 특정 C++ 데이터 구조와 함께 사용할 수 있는 메서드 표가 제공됩니다.
Vector 메서드
| 메서드 | 기능 |
| push_back() | 벡터의 끝에 새로운 요소를 추가합니다 |
| pop_back() | 벡터에서 마지막 요소를 제거합니다 |
| swap() | 지정된 요소들을 서로 바꿉니다 |
| front() | 첫 번째 요소에 대한 참조를 반환합니다 |
| back() | 마지막 요소에 대한 참조를 반환합니다 |
| empty() | 벡터가 비어 있는지 여부를 확인합니다 |
| clear() | 벡터에서 모든 요소를 제거합니다 |
| resize() | 벡터의 크기를 수정합니다 |
| size() | 벡터에 있는 요소의 개수를 반환합니다 |
| insert() | 지정된 위치에 지정된 요소를 삽입합니다 |
챌린지
쉬움입력으로부터 -1이 입력될 때까지 양수들이 입력됩니다. 그 후, 마지막으로 주어진 자연수 N이 기준 숫자가 됩니다. N을 나누었을 때 나머지가 없는 모든 요소를 출력하세요.
예시:
Input
5
10
15
-1
100Output
5
10왜냐하면 100은 5와 10으로 나누어지지만, 15로는 나누어지지 않기 때문입니다.
Input
2
4
6
8
-1
12Output
2
4
6왜냐하면 12는 2, 4, 6으로 나누어지지만, 8로는 나누어지지 않기 때문입니다.
직접 해보기
#include <vector>
#include <iostream>
using namespace std;
int main()
{
// Enter your code here
return 0;
}C++ - 표준 템플릿 라이브러리의 모든 레슨
직접 연습해 보세요: 온라인 C++ 컴파일러