#include <vector>

1. 생성 및 초기화

// 1차원
vector<int> vec;
vector<int> vec(10);    // 원소 10개를 0으로 초기화(0, 0, ...)
vector<int> vec(10, 1); // 원소 10개를 3으로 초기화(1, 1, ...)
vector<int> vec[10];    // 크기 10인 벡터 생성
vector<int> vec2(vec);    // 벡터 vec을 복사하여 vec2 생성 
vector<int> vec2(vec.begin(), vec.end()+1); // 벡터 vec의 일부를 복사하여 vec2 생성

// 2차원
vector<vector<int>> vec;
vector<vector<int>> vec(2, vector<int>(5, 1)); // 1으로 초기화된 크기 5의 벡터를 2개 생성
/*
1 1 1 1 1
1 1 1 1 1
*/

 

2. 원소 추가 / 제거

vec.push_back(1);         // 원소 추가
vec.insert(iter, 2);      // 원하는 위치에 추가

// 원하는 위치에 벡터를 추가
vector<int> vec2(2, 400);
vec.insert(iter, vec2.begin(), vec2.end());

/*
erase : vector 의 요소를 삭제
remove : vector 의 요소를 이동시킬뿐 요소를 삭제하지 않음
*/
vec.pop_back();             // 마지막 원소 삭제
vec.erase(vec.begin() + i); // i번째 특정 위치 요소 제거
vec.erase(remove(vec.begin(), vec.end(), 1), vec.end()); // 1이라는 원소를 이동시키고, 1 원소를 삭제

//remove_if 예시
bool isEven(int num) {
    return num % 2 == 0;
}
vec.erase(remove_if(vec.begin(), vec.end(), isEven), vec.end());

 

3.  접근

vec[0][0];       // 직접 접근 - 범위 체크X
vec.at(0).at(0); // 간접 접근 - 범위 체크O
auto iter = vec.begin(); // 반복자
for(auto iter : vec){    // 벡터 순회하며 출력
	cout << iter << endl;
}

 

4. 값 채우기 및 재조정

#include <algorithm>
fill(vec.begin(), vec.end(), 1); //전체를 1로 채움

vec.reserve(100); //벡터 크기(메모리) 변경. 즉, 할당된 남은 공간보다 들어온 크기가 크면 원소가 전부 invalidate됨
vec.resize(100);  //벡터 사이즈 변경. 즉, size가 100이 되도록 늘림
vector<int>().swap(vec); //벡터 초기화(메모리도)

 

5. 정렬

#include <algorithm>
sort(vec.begin(), vec.end()); 	  	    //오름차순 정렬 1, 3, 5
sort(vec.begin(), vec.end(), greater<>());  //내림차순 정렬 5, 3, 1


bool compare(int a, int b) { //커스텀 함수(오름차순)
	return a < b;
}
sort(vec.begin(), vec.end(), comapre);

 

6. 중복값 제거

#include <algorithm>
sort(vec.begin(), vec.end()); 			     // (1)먼저 정렬한다
vec.erase(unique(vec.begin(),vec.end()), vec.end()); // (2)unique:중복 지점부터 끝까지 중복된 값을 삭제

'⚖️Algorithm > ⚙️C++' 카테고리의 다른 글

[c++] string  (0) 2022.05.01

+ Recent posts