🐣 알고리즘 삐약/✌️알고리즘 개념 잡기

[Linear Data structures] Vector

우주수첩 2022. 4. 20. 00:25
728x90

이겨냅니다. 우주수첩이죠?

 

Vector

  • 일반적인 dynamic array와 비슷하게 사용 가능하다.
    • push_back : 맨 마지막 위치에 원소를 삽입
    • pop_back : 맨 마지막 위치의 원소를 삭제
      • 위의 두 연산을 평균 O(1)시간에 수행 가능.
    • insert : 원하는 위치에 element를 삽입 O(n)시간 소모.
#include <vector> // 헤더파일 스윽 써주께에

vector<int> v;
v.push_back(3); // v : [3]
v.push_back(2); // v : [3, 2]
v.push_back(5); // v : [3, 2, 5]

vector<int> a(8)  // size : 8, initial value == 0
vector<int> b(8,2)  // size : 8, initial value == 2

 

 

# Vector 에 있는 모든 원소 순회 / 반복문 사용

for(int i=0;i<v.size();i++){
	cout << v[i] << '\n';
}

for(auto x : v){
	cout << v[i] << '\n';
}

 

 

 

# Vector 에 있는 모든 원소 순회 / iterator 사용

 

  • C++에는 iterator라는 자료구조의 element를 가리키는 변수가 존재한다.
    • 보통 begin와 end를 많이 사용
      • begin : 첫번째 원소
      • end : 마지막 원소의 다음 element == 자료구조 밖
// 정렬 뒤 vector를 뒤집은 다음 무작위로 섞음
sort(v.begin(), v.end());
reserve(v.begin(),v.end());
random_shuffle(v.begin(),v.end());

//vector의 첫번째 원소 출력
cout << *v.begin() << "\n";


//vector에서 중복된 원소들을 모두 제거
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());

 

 

# unique(v.begin(), v.end())

  • 헤더파일 <algorithm>
  • vector의 배열에서 중복되지 않은 원소들을 앞에서부터 채워나가는 함수
  • 중복되지 않은 원소들을 앞에서부터 채워나가는 역할을 하기 때문에 남은 뒷부분은 그대로 vetor 원소값이 존재한다.

 

 

 

 

# v.erase(v.begin()+s, v.begin()+e)

  • vector에서 특정 원소를 삭제하는 함수
  • [s,e)원소가 삭제된다. == 시작 지점은 닫힌 구간, 끝나는 지점은 열린 구간으로 삭제된다.

 

 

 

자주 사용하는 모습

 

v.erase(unique(v.begin(),v.end()),v.end());

  • 몇개가 중복되고 몇개의 원소가 줄어든지를 알 수 없기 때문에 erase함수와 함께 사용하여 뒷부분의 필요 없는 값들을 삭제한다.
728x90