Menu
CoddyTech

벡터

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()지정된 위치에 지정된 요소를 삽입합니다
challenge icon

챌린지

쉬움

입력으로부터 -1이 입력될 때까지 양수들이 입력됩니다. 그 후, 마지막으로 주어진 자연수 N이 기준 숫자가 됩니다. N을 나누었을 때 나머지가 없는 모든 요소를 출력하세요.

예시:

 

Input
5
10
15
-1
100
Output
5
10

왜냐하면 100은 5와 10으로 나누어지지만, 15로는 나누어지지 않기 때문입니다.

 

Input
2
4
6
8
-1
12
Output
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++ 컴파일러