본문 바로가기
Programming/C | C++

STL - Vector 삽입/삭제/정렬/복사 등 사용법 예제

by 썽하 2021. 3. 10.

임베디드 쪽 개발하는 현업에서 뛰다 보니 STL을 쓰지 않고 필요 기능만 구현해서 쓴다.

이직을 준비중인데 STL 사용법들이 잘기억나지 않아 복기 겸 정리해보고자 한다.

 

기본 동작

vector<int> v;
vector<int> v(5);    // 초기화 0, 5칸
vector<int> v(5, 1); // 초기화 1, 5칸

v.push_back(1); // 마지막에 삽입
v.pop_back();   // 마지막 원소 제거
v.clear();      // 모두 제거

v.insert(1,2,3);			// 1번째 위치에 3값을 2개 삽입
v.insert(1,2);				// 1번째 위치에 2값을 삽입
v.erase(iter);				// iter가 가르키는 놈을 삭제
v.erase(iter1, iter2);		// iter1부터 iter2가 까지 범위 삭제

v.empty();		// vector 가 비어있는지 확인
v.size();		// vector 벡터의 사이즈 리턴	

v.front(); // 첫번째 원소
v.back();  // 마지막 원소

v.begin(); 	// 첫번째 iterator
v.end();   	// 마지막 iterator
v.rbegin(); // 리버스 첫번째 iterator
v.rend(); 	// 리버스 첫번째 iterator

v.reserve(10); 		// 10칸을 할당(사이즈와 다름 메모리 확보)
v.resize(10);     	// 크기를 10으로 변경, 커질경우 초기화 0
v.resize(10, 1);  	// 크기를 10으로 변경, 커질경우 초기화 1

 

복사

// 전체 복사 1
vector_to.resize(vector_from.size());
copy(vector_from.begin(), vector_from.end(), vector_to.begin());

// 부분 복사 1
vector_to.resize(vector_from.size());
copy(vector_from.begin() + 1, vector_from.begin() + 3, vector_to.begin());

// 전체 복사 2
vector_to.clear()
vector_to.assign(vector_from.begin(), vector_from.end());

// 부분 복사 2
vector_to.clear()
vector_to.assign(vector_from.begin() + 1, vector_from.begin() + 3);

 

정렬

// 오름차순 정렬
sort(v.begin(), v.end()); // == sort(v.begin(), v.end(), less<int>() );

// 내림차순 정렬
sort(v.begin(), v.end(), greater<int>() );

// 구조체 a값 기준 오름차순 정렬 - 람다 함수
sort(vv.begin(), vv.end(), [](const auto& lhs, const auto& rhs) {return lhs.a < rhs.a; });

// 구조체 a값 기준 내림차순 정렬 - 람다 함수
sort(vv.begin(), vv.end(), [](const auto& lhs, const auto& rhs) {return lhs.a > rhs.a; });

// 구조체 a값 기준 오름차순 정렬 - cmp 함수
typedef struct str {int a, b;}str;
bool cmp(const str& lhs, const str& rhs)
{
	return lhs.a < rhs.a;
}
sort(v.begin(), v.end(), cmp);

// 구조체 a값 기준 내림차순 정렬 - cmp 함수
bool cmp(const str& lhs, const str& rhs)
{
	return lhs.a > rhs.a;
}
sort(v.begin(), v.end(), cmp);

 

 

역순

reverse(v.begin(), v.end());

 

필요기능이 더 생기면 차차 추가할 예정

댓글