1. vector란?
- 어떠한 자료형도 넣을 수 있는 동적 배열
- vector에 저장된 요소는 연속된 메모리 공간에 위치
- 요소 수가 증가함에 따라 메모리를 자동으로 관리
- 어떤 요소에도 임의 접근이 가능
2. vector 헤더파일 및 네임스페이스
- #include <vector>
- using namespace std;
3. vector 만들기
vector<int> v;
- 빈 벡터를 생성
vector<int> v(5);
- 크기가 5이고, 모든 요소가 기본값인 0으로 초기화된 벡터 생성
vector<int> v(5, 10);
- 크기가 5이고, 모든 요소가 10으로 초기화된 벡터 생성
vector<int> v2(v1);
- v1 vector와 동일한 크기 및 데이터를 갖는 vector v2 생성
예시)
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 크기가 0인 벡터 선언
vector<int> vec1;
// 지정한 값으로 이루어진 크기가 5인 벡터 선언
vector<int> vec2 = { 1, 2, 3, 4, 5 };
// 기본값 0으로 초기화된 크기 5인 벡터 선언
vector<int> vec3(5);
// 크기가 10이고, 모든 원소가 5로 초기화된 벡터 선언
vector<int> vec4(10, 5);
return 0;
}
4. vector 멤버 함수
vector의 마지막 요소 추가/제거
v.push_back(7);
- vector의 마지막에 7을 추가
v.pop_back();
- vector의 마지막 요소 제거
예시)
vector<int> vec; // 빈 벡터 생성
vec.reserve(3)
vec.push_back(1); // 벡터의 뒤에 1 추가 {1}
vec.push_back(2); // 벡터의 뒤에 2 추가 {1, 2}
vec.push_back(3); // 벡터의 뒤에 2 추가 {1, 2, 3}
vec.pop_back(); // 맨 마지막 원소 제거 {1, 2}
vector의 용량, 크기
v.capacity();
- vector에 할당된 공간 수
v.size();
- vector에 실제로 들어 있는 요소 수
v.reserve(10);
- vector의 용량을 10만큼 늘림
- 용량을 늘림으로서 불필요한 메모리 재할당을 막을 수 있음
v.clear();
- vector의 모든 요소 제거
- 크기(size)는 0이 되고 용량(capacity)은 그대로
예시) 사이즈를 이용한 모든 요소 출력
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::vector<int> vec = { 0, 1, 2, 3, 4, 5};
for (int i = 0; i < vec.size(); ++i)
{
cout << vec[i] << " ";
}
return 0;
}
vector 요소 접근
v[idx];
- idx 번째 원소를 참조
반복자(iterator)
v.begin()
- vector의 첫 번째 요소를 가리키는 반복자 반환
v.end()
- vector의 마지막 요소의 다음 요소를 가리키는 반복자 반환
v.rbegin()
- vector의 마지막 요소를 가리키는 역방향 반복자를 반환
v.rend()
- vector의 첫 번째 요소의 앞 요소를 가리키는 역방향 반복자를 반환
예시) 반복자를 이용하여 모든 요소 출력
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::vector<int> vec = { 0, 1, 2, 3, 4, 5};
vec.insert(vec.begin(), -1);
for (auto& v : vec)
{
cout << v << " ";
}
for (vector<int>::iterator iter = vec.begin(); iter != vec.end(); ++iter)
{
cout << *iter << " ";
}
return 0;
}
특정 위치 요소 삽입/삭제
std::vector<int> vec = {1, 2, 3, 4, 5};
vec.insert(vec.begin(), 0); // 벡터 맨 앞에 0 추가 {0, 1, 2, 3, 4, 5}
vec.erase(vec.end() - 1); // 맨 마지막 요소 제거 {0, 1, 2, 3, 4}
vec.erase(vec.begin() + 2, vec.end()); // 2번 째 원소부터 마지막 원소까지 제거 {0, 1}
5. vector 정렬(sort), 값 찾기(find)
정렬
sort(vec.begin(), vec.end());
- vector를 오름 차순 정렬
정렬 예시)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> vec = { 3, 1, 4, 2, 7, 6, 5 };
sort(vec.begin(), vec.end()); // 오름 차순 정렬 {1, 2, 3, 4, 5, 6, 7}
for (auto v : vec)
cout << v << " ";
return 0;
}
내림차순 정렬
vector<int> vec = { 3, 1, 4, 2, 7, 6, 5 };
sort(vec.begin(), vec.end(), greater<int>()); // 내림 차순 정렬 {7, 6, 5, 4, 3, 2, 1}
값 탐색
find(v.begin(), v.end(), 3)
- vector에서 요소의 값이 3인 요소 위치의 반복자 반환
- vector의 범위에 찾을 대상이 없는 경우 마지막 반복자인 v.end()를 반환
예시)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> vec = { 3, 5, 6, 8 };
if (find(vec.begin(), vec.end(), 7) == vec.end())
{
cout << "not exist" << endl;
}
auto it = find(vec.begin(), vec.end(), 6);
if (it != vec.end())
{
vec.erase(it);
}
for (auto v : vec)
cout << v << " ";
return 0;
}
반응형
'Programming > C++' 카테고리의 다른 글
Visual Studio에서 Nana GUI library 사용하기 (0) | 2023.03.14 |
---|---|
[C++] C++ 공부 시 참고 사이트 (isocpp, cppreference, ..) (0) | 2023.02.20 |