320x100
#include <vector>
벡터 생성 및 초기화
// 1차원
// 디폴트 생성자
vector<int> vec;
// 원소 10개를 zero 초기화(0, 0.0, nullptr..)
vector<int> vec(10);
// 원소 10개를 3으로 초기화
vector<int> vec(10, 3);
// 이니셜라이저 리스트 생성
vector<int> vec({1, 2, 3});
// 유니폼 초기화
vector<int> vec = {1, 2, 3};
vector<int> vec{1, 2, 3};
// 힙에 생성
auto vec = std::make_unique<vector<int>>(10);
// int타입 벡터 배열(크기 : 10) 생성
vector<int> vec[10];
// int형 백터 배열 생성(행은 가변이지만 열은 고정)
vector<int> vec[] = {{1, 2}, {3, 4}};
// 벡터 vec을 복사하여 vec2 생성
vector<int> vec2(v);
// 벡터 vec의 일부를 복사하여 vec2 생성
vector<int> vec2(v.begin(), v.end()+3);
// 2차원
// int타입 2차원 벡터 생성
std::vector<std::vector<int>> vec2d;
// 3으로 초기화된 크기 10 의 벡터를 10개 생성
std::vector<std::vector<int>> vec2d(10, std::vector<int>(10, 3));
벡터 복제 / 대입
// 이전에 저장된 원소를 모두 삭제하고 값 10인 원소 5개 추가
vec.assign(5, 10);
vec.assign({1, 2, 3});
// 내용 맞바꾸기(상수 시간)
vec.swap(vec2);
벡터 원소 추가/제거
// 원소 추가
vec.push_back(1);
// 원소 추가
vec.emplace_back(1);// 임시 객체의 생성자를 적게 호출할 수 있다고 알려져 있지만 push_back에서도 내부에서 emplace_back를 호출하기 때문에 의미없다.
// 원소 추가
vec.insert(5);
// 원하는 위치에 추가(반복자)
vec.insert(iter, 10);
// 원하는 위치에 벡터를 추가
std::vector<int> vec2(2, 400);
vec.insert(iter, vec2.begin(), vec2.end());
// 삭제
vec.pop_back();
// i번째 특정 위치 요소 제거
vec.erase(vec.begin() + i);
// remove
vec.erase(std::remove(vec.begin(), vec.end(), 1), vec.end());
// remove_if
vec.erase(std::remove_if(vec.begin(), vec.end(), [](int n) { return n%2 == 0; }), vec.end());
벡터 접근 방법
// 직접 접근 - 범위의 체크 없음
vec[0];
vec[0][0];
// 간접 접근 - 범위의 체크
vec.at(0);
vec.at(0).at(0);
// 반복자
std::vector<int>::iterator iter = vec.begin();
iter += 5;
--iter;
auto& citer = vec.cbegin(); // const
벡터 출력
for_each(vec.begin(), vec.end(),
[](const int& n) { cout << n << " "; });
벡터에 값 채우기 (first부터 second까지 third로 채움)
#include <algorithm> // std:fill
std::fill(vec.begin(), vec.end(), 1);
벡터 크기(메모리) 변경하기
vec.reserve(10);
벡터 사이즈 변경하기
vec.resize(10);
벡터 초기화 하기(메모리)
std::vector<int>().swap(vec);
벡터 정렬
#include <algorithm> // std::sort
#include <functional> // std::less, greater
// 기본(오름차순)
std::sort(vec.begin(), vec.end()); // 1 2 3 4 5 6 7 ...
// 오름차순
std::sort(vec.begin(), vec.end(), std::less<int>()); // 1 2 3 4 5 6 7 ...
// 내림차순
std::sort(vec.begin(), vec.end(), std::greater<int>()); // 9 8 7 6 5 4 ...
//커스텀 함수(오름차순)
bool compare(int a, int b) {
return a < b;
}
std::sort(vec.begin(), vec.end(), comapre);
// 커스텀 객체 정렬(오름차순)
class CustomObject
{
bool operator <(CustomObject& a) {
return this->val < b.val;
}
};
벡터 중복값 제거
#include <algorithm> // std::sort
// 선 정렬
std::sort(vec.begin(), vec.end());
// 중복 지점부터 끝까지 삭제
vec.erase(std::unique(vec.begin(),vec.end()), vec.end());
320x100
'프로그래밍 > Morden C++' 카테고리의 다른 글
std::clamp (0) | 2021.09.29 |
---|---|
std::accumulate (0) | 2021.09.22 |
[C++17] std::optional (0) | 2021.07.17 |
std::splice (0) | 2021.07.13 |
std::advance (0) | 2021.07.13 |