[C++] vector

·2021년 9월 22일
0

Q&A

목록 보기
4/4

vector


1. vector container

자동으로 메모리가 할당되는 배열. (stack과 비슷)


2. header 및 declare
#include <vector>

using namespace std;

vector<[data type]> [variable name]

3. constructor
  • vector v;
    비어있는 vector v를 생성.

  • vector v(n);
    default value(0)로 초기화된 n개의 원소를 가지는 vector v를 생성.

  • vector v(n, k);
    k 값으로 초기화된 n개의 원소를 가지는 vector v를 생성.

  • vector v2(v);
    vector v를 복사해서 vector v2를 생성.


4. function
  • v.assign(n, k);
    k 값으로 n개의 원소 할당.

  • v.at(idx);
    idx번째 원소 참조.
    v[idx] 보다 속도는 느리지만, 범위를 점검하므로 안전.

  • v[idx];
    idx번째 원소 참조. v.at(idx)보다 속도 빠름.

  • v.front();
    첫번째 원소 참조.

  • v.back();
    마지막 원소 참조.


  • v.begin();
    첫번째 원소를 가리킴. (iterator와 사용)

  • v.end();
    마지막의 다음 원소를 가리킴 (iterator와 사용)

  • v.rbegin();
    reverse begin을 가리킴 (iterator와 사용)

  • v.rend();
    reverse end 을 가리킨다 (iterator와 사용)


  • v.reserve(n);
    n개의 원소를 저장할 위치 동적할당

  • v.resize(n);
    크기를 n으로 변경. 커지는 경우, default value(0)로 초기화.

  • v.resize(n,k);
    크기를 n으로 변경. 커지는 경우, k 값으로 초기화.


  • v2.swap(v);
    v와 v2의 capacity를 스왑.
    (v의 capacity 할당 메모리 해제시 사용하기도 함. vector().swap(v);)

  • v.insert(i, n, k);
    i번째 위치에 n개의 k 값을 삽입. (원래 있던 값은 뒤로 밀림)

  • v.insert(i, k);
    i번째 위치에 k 값을 삽입. (삽입 위치의 iterator를 반환함)


  • v.clear();
    모든 원소 제거. size만 줄어들고, capacity는 남음.

  • v.push_back(k);
    마지막 원소 뒤에 k 값 삽입.

  • v.pop_back();
    마지막 원소 제거.

  • v.erase(iter);
    v.erase(iter); : iter가 가리키는 원소 제거.
    v.erase(start, end); : [start, end) 원소 제거.
    size만 줄어들고 capacity는 남음.

  • v.empty()
    vector가 비었으면(size가 0이면) return true


  • v.size();
    return 원소의 개수.

  • v.capacity();
    return 할당된 메모리 크기.


5. member 형식
  • iterator : 반복자
  • reverse_iterator : 역반복자
  • value_type : 원소 타입
  • size_type : 원소의 개수

비교연산자(== , != , < , > , <= , >=) 사용 가능




사용 예시들

  • 중복 제거
sort(v.begin(), v.end()); // 벡터 정렬.
// unique : 중복되는 값 뒤로 보냄. return 뒤로 옮긴 값들의 첫 위치.
// 쓰레기값 첫 위치부터 벡터 마지막 위치까지 erase.
v.erase(unique(v.begin(), v.end()), v.end()); 

  • 탐색
// find : 범위 내 일치하는 첫 번째 원소를 가리키는 반복자 리턴.
// 일치하는 원소를 찾지 못한 경우 end 리턴.
auto iter = find(v.begin(), v.end(), num);
  
if (iter != v.end()) {
	cout << iter - v.begin() << "위치에" << num << "존재";
}


참고

  • 최소, 최대
#include <algorithm>

min({ a, b, c , ... }); // 최소값 리턴.
max({ a, b, c , ... }); // 최대값 리턴.

  • 소수점
#include <cmath>

ceil(x); // 올림.
round(x); // 반올림.
floor(x); // 내림.
trunc(x); // 버림.

//   x    c   r   f   t
//  1.4   2   1   1   1
//  1.5   2   2   1   1
// -1.4  -1  -1  -2  -1
// -1.5  -1  -2  -2  -1

// n 번째 자리수에서 올림,반올림,내림 하려면?
// 다음과 같이 쓰면 됨.
ceil( x * (10*n) ) / (10*n);
profile
나그네 개발자

0개의 댓글