vector container 정리

이영준·2023년 10월 31일
0

C++ 기본문법

목록 보기
9/10

📌 Vector?

C++에서 동적으로 할당되는 메모리를 가지는 배열 형태를 사용하기 위한 STL의 container 중 하나이다.

📌 Header

#include <vector>

📌 선언 및 초기화

vector<int> v;
vector<int> v(5); // 0으로 5개 초기화
vector<int> v1({1,1,1,1,1,1});
vector<int> v3 = {1,1,1,1,1};
vector<int> v(5, 2); // 2로 5개 초기화
vector<int> v2(v1); //v1 vector 복사

📌 빈 vector 선언 후 초기화

  vector<int> v1;
  for (int i = 1; i <= 5; i++)
    v1.push_back(i);
    
  vector<int> v1;
  v1.assign(5,2); // 2의 값으로 5개 할당
  vector<int> v2(5); // 5개 공간 할당
  fill(v2.begin(), v2.end(), 3) // 3을 v2 공간안에 모두 할당
  // 기존에 할당되어있던 값이 있으면 초기화 후 재할당한다.

📌 2차원 vector 초기화

초기화된 1차원 vector를 넣어주는 방식으로 2차원 vector를 초기화 한다.

fill(v.begin(), v.end(), vector<int>(v.size(), 10));

// 10*10의 0으로 채워진 vector
vector<vector<int>> v2(10, vector<int>(10, 0));

📌 출력

  for (auto i = v1.begin(); i != v1.end(); ++i)
    cout << *i << " ";

  // 반대 방향으로 아이템을 출력
  // rbegin(), rend()는 역순(reverse)의 Iterator를 리턴
  cout << "\n";
  for (auto ir = v1.rbegin(); ir != v1.rend(); ++ir)
    cout << *ir << " ";

// iterator 연산자 사용
vector<int>::iterator ir;
for (ir = v1.begin(); ir < v1.end(); ir++)
cout << *ir << " ";

  // 배열처럼 Vector[index] 으로 아이템 출력
  cout << "\n";
  for (int i = 0; i < v1.size(); i++)
    cout << v1[i] << " ";

  // Vector.at(index)로 아이템 출력
  cout << "\n";
  for (int i = 0; i < v1.size(); i++)
    cout << v1.at(i) << " ";

📌 vector 깊은 복사

https://m.blog.naver.com/roxy2131/222129522824

📌 멤버함수

🔑 v.assign(cnt, val)

위에 나와있듯이 벡터에 값 할당

vector<int> v1;
  v1.assign(5,2); // 2의 값으로 5개 할당

🔑 v.reserve(int)

주어진 사이즈만큼 vector 메모리 공간 확보. 0으로 초기화되지는 않는다.

v.reserve(15);

🔑 v.resize(int)

실질적으로 벡터의 사이즈를 할당하는 함수.
역시 0으로 초기화되지 않음. 특정 사이즈로 벡터를 초기화하고 싶을 때 자주 사용됨

v.resize(15);

🔑 v.clear()

원소는 제거하고 메모리는 그대로 유지 (size = 0, capacity는 그대로)

v.clear();

🔑 v.erase(iterator)

원하는 iterator 인덱스의 값을 지운다.
마지막 값을 지우고 싶다면

v.erase(v.end()-1);

위와 같이 할 수 있다.

🔑 v.insert(iterator, val)

원하는 값을 원하는 idx에 삽입한다.

	vector<int> v(5);
	for (int i = 0; i < 5; i++) {
		v[i] = i;
	}
	v.erase(v.begin() + 1);
	for (int i = 0; i < v.size(); i++) {
		cout << " " << v[i];
	}

	cout << "\n";

	v.insert(v.begin() + 2, 0);
	for (int i = 0; i < v.size(); i++) {
		cout << " " << v[i];
	}

0 2 3 4
0 2 0 3 4

오름차순, 내림차순 정렬

#include <algorithm>
sort(v.begin(), v.end()); // 오름차순
sort(v.rbegin(), v.rend()); // 내림차순 (오름차순의 역순) 
sort(v3.begin() , v3.end(),less<>()); // 오름차순
sort(v3.begin() , v3.end(), greater<>()); // 내림차순

📌 Reference

출력
https://coding-factory.tistory.com/596
멤버함수
https://blockdmask.tistory.com/70

profile
컴퓨터와 교육 그사이 어딘가

0개의 댓글