자료구조 와 알고리즘/c++

std::vector

브랑제리 2022. 4. 23. 20:10

std::vector

벡터에 새로운 원소를 추가할 경우 동작

push_back, insert

  • 원소를 삽입할때 공간이 남아 있다면 O(1)의 시간이 걸린다.
  • 하지만 공간이 없을 경우 아래의 로직이 수행된다.
    • 2*size 크기의 메모리를 새로 할당
    • 새로 할당한 메모리로 기존 원소를 전부 복사/이동
    • 데이터 포인터를 새로 할당한 메모리 주소로 지정
    • 원소를 추가하고 벡터크기를 1만큼 증가한다.
  • 이 경우 O(n)의 시간복잡도이다.

https://en.cppreference.com/w/cpp/container/vector

예제

초기화 방법

	// 크기가 0인 벡터 선언
	std::vector<int> vec1;
	
	// 지정한 초깃값으로 벡터 선언
	std::vector<int> vec2 = {1, 2, 3, 4, 5};
	
	// 크기가 10인 벡터 선언
	std::vector<int> vec3(10);
	
	// 크기가 10이고 모든 원소가 5로 초기화된 벡터 선언
	std::vector<int> vec4(10, 5);

vector 사용예제

#include <vector>
#include <iostream>

using namespace std;
int main()
{
	std::vector<int> vec1;

	vec1.push_back(1);
	vec1.push_back(2);
	vec1.push_back(3);
	vec1.push_back(4);

	for (int n : vec1)
	{
		cout << n << ", ";
	}
	cout << endl;

	// 맨 앞에 5 추가
	vec1.insert(vec1.begin(), 5);
	for (int n : vec1)
	{
		cout << n << ", ";
	}
	cout << endl;

	//0번 제거하기
	vec1.erase(vec1.begin());
	for (int n : vec1)
	{
		cout << n << ", ";
	}
	cout << endl;

	// 0~1번째까지 제거하기
	vec1.erase(vec1.begin(), vec1.begin() + 2);
	for (int n : vec1)
	{
		cout << n << ", ";
	}
	cout << endl;
}
반응형

'자료구조 와 알고리즘 > c++' 카테고리의 다른 글

std::list  (0) 2022.04.24
std::array  (0) 2022.04.23