개념/c++

vector

웅드 2023. 11. 30. 14:15

vector은 c++에서 자주 사용하는 STL의 연속 컨테이너이다.

자동으로 메모리가 할당되는 배열인데 배열처럼 쓰지만 array처럼 최대 크기가 정해져 있는 것이 아닌,

필요에 따라 유동적으로 확장되는 배열이다.

 

가능한 최대 크기에 맞춰 할당해야 하는 배열에 비해 메모리를 효율적으로 사용할 수 있다.

 

모든 STL 컨테이너가 그렇듯 템플릿이기 때문에 모든 형식으로 데이터를 넣을 수 있다.

ex) int , float , char , struct

 

vector의 구조

출처 https://dense.tistory.com/entry/cpp-stl-vector

 

vector의 생성

  • vector<int> v; // 비어있는 vector v 생성
  • vector<int v(3); // 0으로 초기화된 길이 3의 vector v 생성
  • vector<int> v(3, -1); // -1로 초기화된 길이 3의 vector v 생성
  • vector<int> vCopy(v); // v를 복사한 vCopy vector 생성

vector의 멤버함수

  • v[idx]; // v의 idx번째 위치의 데이터 참조
  • v.at(idx); // v의 idx번째 위치의 데이터 참조. v[idx]보다 느린 방법이지만 범위 초과를 방지하는 점검을 가진다.
  • v.front(); // v의 첫 번째 데이터를 참조
  • v.back(); // v의 마지막 데이터를 참조
  • v.beghin(); // 첫 번째 데이터를 가리킴. 포인터와 비슷한 iterator
  • v.end(); // 마지막 데이터의 다음을 가리킨다. 포인터와 비슷한 iterator
  • v.rbegin(); // 마지막 원소를 가리킨다.
  • v.rend(); // 첫 번째 원소의 이전 위치를 가리킨다.
  • v.push_back(5); // 마지막 데이터 뒤에 5를 삽입한다.
  • v.pop_back(); // 마지막 원소 제거
  • v.clear(); // 모든 원소 제거
  • v.reserve(n); // n개의 데이터를 저장할 수 있는 공간을 동적할당으로 예약
  • v.resize(n); // v의 크기를 n으로 변경. 원래 크기보다 작아지는 경우엔 뒤에서부터 지워진다.
  • v.resize(n,5); // v의 크기를 n으로 변경하고 원래 크기보다 커지는 경우엔 빈자리를 5로 초기화 한다.
  • v.size(); // 데이터 개수를 반환한다.
  • v.capacity(); // 할당된 공간의 크기를 반환한다.
  • v2.swap(v1); // v1과 v2를 교환한다.
  • v.insert(5,2); // 5번째 위치에 2를 삽입힌다.
  • v.insert(5,2,3); // 5번째 위치에 2를 3개 삽입한다. 가운데 끼워넣기 때문에 전체 size가 증가한다.
  • v.erase(iter); // iterator iter가 가리키는 데이터 삭제. 데이터가 삭제되었기 때문에 size가 감소한다.
  • v.erase(iter1, iter2); // iter1부터 iter2이전 까지의 데이터 삭제
  • v.empty(); // v가 비어있으면 true, 비어있지 않으면 false 반환.

iterator(반복자)를 사용하여 모든 요소 출력하기

int main(){

    vector<int> v = {0,1,2,3,4,5};
    v.insert(v.begin(), -1);
    
    for(auto& a : v){
    	cout << a << " ";
    }
    for(vector<int>::iterator iter = v.begin(); iter != v.end(); ++iter){
    	cout << *iter << " ";
    }
    return 0;
    
}

 

vector 정렬 ( sort )

include <algorithm>
include <vector>
include <iostream>

using namespace std;

int main(){

    vector<int> v = {2,4,1,7,5,6,3};
    
    sort(v.begin(), v.end()); // 오름차순 정렬
    sort(v.begin(), v.end(), greater<int>()); // 내림차순 정렬
    for(auto a : v){
    	cout << a << " ";
    }
    return 0;
    
}

 

vector find 함수

int main(){

    vector<int> v = {9,3,6,2,1};
    
    if(find(v.begin(), v.end(), 7) == v.end()){
    	cout << "not exist" << endl;
    } // vector의 범위에 찾을 대상이 없는 경우 마지막 반복자인 v.end() 반환한다.
    
    auto it = find(v.begin(), v.end(), 3);
    if(it != v.end())
    	v.erase(it);
    for (auto a : v)
    	cout << a << " ";
    return 0;
}
반응형