[STL] Vector컨테이너

정영훈·2022년 8월 20일
0

알고리즘기초

목록 보기
2/6

C언어 배열의 문제점

  • 배열의 크기는 컴파일 시간에 결정되는 상수이어서 프로그램 실행 중에는 변경될 수 없다.
  • 따라서 원소를 추가하거나 삭제할 수 없다.
  • 대부분의 응용 프로그램에서 데이터는 동적이고 고정크기가 아님, 즉 배열을 크게 잡을 경우 쓸모없이 메모리를 잡아두게 되고, 배열을 작게 선언할 경우 오버플로우가 발생함.
  • C언어에서는 동적할당을 위해서는 malloc(), calloc()과 같은 동적할당을 사용하여야 함.

    메모리 구조 : http://www.tcpschool.com/c/c_memory_structure

Vector 컨테이너

  • 자동으로 메모리가 할당되는 배열
  • 배열처럼 연속적인 메모리 공간에 저장하여 index로 접근 가능함. v[0]. v[1]
  • 앞쪽이 막혀 있는 형태로 앞쪽에는 원소를 추가, 제거할 수 없고, 뒤쪽에서만 원소를 추가, 제거 가능

vector의 사용

  • 헤더파일 추가 #include
  • vector의 선언은 std::vector<[data type]> [변수이름]
  #include<vector>
  vector<int> v;
  vector<string> p;
  vector<int> v(5);
  vector<int> v(5,5);
  vector<pair<int, int>> vp;
  • vector<int> v; : 자료형이 int형인 벡터 선언
  • vector<string> p; : 자료형이 문자열인 벡터 선언
  • vector<int> v(5) : 5개의 벡터방을 생성하고, 동시에 각 벡터방의 값을 0으로 초기화
  • vector<int> v(5,5) : 미리 5개의 벡터방을 생성하고, 동시에 각 벡터방의 값을 5으로 초기화
  • vector<pair<int,int> vp : 두개의 값을 쌍으로 하나의 벡터방에 저장함

vector의 멤버 함수

구분기능예시
push_back(x);마지막 원소 뒤에 자료 x 삽입v.push_back(7);
insert(k,x);k위치 앞에 자료 x 삽입v.insert(v.begin()+2,4);
pop_back();마지막 원소를 제거v.pop_back();
clear();모든 원소를 제거v.clear();
erase();특정 원소를 제거v.erase(v.begin()+2);
at(i);I번째 원소를 참조함v.at(i); v[i]처럼 사용가능
front();첫 번째 원소 참조함v.front();
back();마지막 원소를 참조함v.back();
size();원소의 개수를 리턴함v.size();
empty();벡터가 비어있는지 확인v.empty();

이터레이터

  • 포인터와 비슷하게 동작하며 컨테이너에 저장된 원소를 순회하고 접근할 수 있는 방법 제공
  • 반복자로 원소에 접근할 때는 *연산자를 사용하여 접근할 수 있다.
    vector<int>::iterator iter = vec.front()

😁 예시

#include<bits/stdc++.h>
using namespace std;
int main(){
	vector<int> v;
	vector<int>::iterator iter;
    for(int i=1;i<10;i++){
        v.push_back(i);
    }
	iter = v.begin(); 
	cout<<*iter<<'\n';
	iter++; 
	cout<<*iter<<'\n';
	vector<int>::iterator iter2=v.end();
	cout<<*iter2<<'\n';
	cout<<*(iter2-1)<<'\n'; 
}

관련문제

profile
경북소프트웨어고등학교 정보교사

0개의 댓글