노트

c++) Container

tose33 2021. 2. 15. 23:45

Vector : 길이 변경 가능한 배열

 

vector<int> v; // 길이 0 벡터

vector<int> v(10); // 길이 10 벡터

vector<int> v(15, 1); // 길이 15, 초기값 1 벡터

vector<int> v = {1, 2, 3, 4};

 

v.push_back(), v.pop_back(), v.clear(), v.resize(), v.size(), v.empty(), v.clear(), v.front(), v.back()

vector<int> v = {1, 2, 3, 4, 5};

v.push_back(6); // 1, 2, 3, 4, 5, 6

v.pop_back(); // 1, 2, 3, 4, 5

v.clear(); // 

v.resize(5); // 0, 0, 0, 0, 0

vector<int> v = { 1, 2, 3};
cout << v.size();   // 3
cout << v.empty();  // 0 (false)

v.clear(); 
cout<< v.empty();  // 1 (true)


vector<int> v = {1, 2, 3};
cout << v.front();  // 1
cout << v[1];  // 2
cout << v.back();  // 3

 

 

iterator : 반복자, vector의 요소 가르킴

vector<int> v = {1, 2, 3, 4};

for(vector<int>::iterator it = v.begin(); it != v.end(); ++it) {
	cout << *it << ' ';
}	// 1 2 3 4 5 

// vector<int>::iterator 라고 명시하지 않고 auto로 씀
for(auto it = v.begin(); it != v.end(); ++it)
{
	cout << *it << ' ';
} // 1 2 3 4 5

 

iterator 이용한 값 삽입

vector<int> a = {1,2,3};

auto it = a.begin();
a.insert(it, 4);  // 1 2 3 4

it = a.begin() + 2;
a.inert(it, 3, 0);  // 1 2 0 0 0 4

it = a.begin() + 1;
vector<int> v2 = {9, 9};
a.insert(it, v2.begin(), v2.end());  // 1 9 9 2 0 0 0 4

a.erase(a.begin());  // 9 9 2 0 0 0 4

// 주의) 이 경우 a.begin()부터 a.begin()+2의 전까지 지워짐
a.erase(a.begin(), a.begin()+2);  // 2 0 0 0 4

 

 

deque : front와 back 모두 삽입 삭제 가능한 queue의 한 종류

#include <deque>

deque<int> d;

d.push_back(1);  // 1
d.push_front(2); // 2 1
d.push_back(3); // 2 1 3

d.pop_back(); // 2 1
d.pop_front();  // 1

 

list : 각각의 요소가 연결되있는 자료구조

array, vector, deque는 데이터 삽입 삭제 시, 모든 데이터를 이동 시키므로 재정렬로 인해 O(N).

list는 각각의 요소가 연결되 있으므로 (linked list) 변경 부분만 변경 하면 되므로 O(1).

 

#include <list>

list<int> l = {-1, 2, -3, 4 };

l.sort(); // -3 -1 2 4

l.sort(greater<int>());  // 4 2 -1 -3

l.reverse();  // -3 -1 2 4