반응형

★ C++ STL vector

 vector는 원소를 뒤에 넣었다가 뒤에서 빼는 구조로 되어 있다. 그림으로 표현하면 다음과 같다.

C++ STL vector

  앞쪽에는 막혀있어서 원소를 넣을 수가 없다. 뒤쪽으로 원소를 집어넣고 빼는 함수가 제공된다. 물론, 컨테이너 기본 연산이 insert를 활용하여 처음이나 중간에 원소를 삽입할 수는 있다. vector를 사용하려면 <vector>를 #include 해야 한다. 컨테이너 기본 연산 외에 vector에서 제공되는 연산은 다음과 같다.

연산

동작

vector c

빈 벡터 생성

vector c(c1)

c1벡터의 원소를 복사하면서 생성

vector c(n)

n개의 원소를 생성

vector c(n, elem)

n개의 원소를 elem 값으로 초기화하면서 생성

vector c(beg, end)

beg부터 end-1까지의 원소를 복사하면서 생성

c.reserve(n)

n개의 용량으로 미리 메모리를 할당하여 예약

swap(c1, cc2)

c1과 c2를 교환

c.at(idx)

idx위치의 원소를 얻어온다. 범위 벗어나면 에러 발생

c[idx]

idx위치의 원소를 얻어온다. 범위 검사 하지 않는다.

c.front()

첫 번째 원소

c.back()

마지막 원소

c.push_back(elem)

마지막에 elem을 추가

c.pop_back(elem)

마지막 원소를 제거

c.resize(n)

벡터 크기를 n으로 변경한다.

c.resize(n, elem)

이전 크기보다 늘어나면, 늘어나는 것만 elem으로 초기화하면서 크기를 n으로 변경한다.

  vector는 뒤에서 넣었다가 빼기 때문에 다음 그림과 같이 옆으로 세워서 생각하면 스택이 된다.

C++ STL vector

스택에서 집어넣은 것은 push_back()에 해당되며, 빼는 것은 pop_back()에 해당된다. 벡터 예제 코드를 살펴보자.

#include <stdio.h>
#include <vector>
using namespace std;
int main()
{
	int i;
	vector<int> ss;   //문자열을 원소로 사용하는 벡터
	ss.reserve(15);   //원소 개수 5개로 예약

	ss.push_back(3);  //데이터 마지막에 삽입
	ss.push_back(4);
	ss.push_back(6);
	ss.push_back(8);
	ss.push_back(10);

	for(i=0;i<ss.size();++i)  //배열처럼 사용한다.
	{
		printf("%d ", ss[i]);
	}
	printf("\n");
	
	ss.pop_back();    //하나를 삭제한다.

	ss.push_back(13);   //2개를 더 삽입한다.
	ss.push_back(15);

	for(i=0;i<ss.size();++i)  //배열처럼 사용한다.
	{
		printf("%d ", ss[i]);
	}
	printf("\n");
	printf(“%d %d\n", ss.front(), ss.back());   //첫 번째 원소와 마지막 원소 출력
	return 0;
}

※  C++에서는 스택도 제공하지만 vector보다 많이 불편하기 때문에 vector를 스택 대신 사용할 수 있다. vector는 배열처럼 사용할 수도 있기 때문에, 우리는 스택을 구현하지 않고도 사용할 수 있다.

반응형
Posted by 명문코딩컴퓨터
,