개발/C++

[C++] vector 컨테이너

hojak99 2016. 12. 21. 19:19

vector 컨테이너 

vector 컨테이너는 동적 배열로 구현되는데, 보통의 배열처럼 vector 컨테이너들도 각각의 원소들이 메모리 상에서 연속적으로 존재하게 된다. 이 때문에 vector 컨테이너의 원소를 참조할 때 iterator(반복자)를 이용해서 순차적으로 참조할 수 있고, 처음 원소부터의 상대적인 거리를 이용하여 접근할 수도 있다.



but, 보통의 배열과는 달리 vector 컨테이너는 스스로 공간을 할당하고, 크기를 확장 또는 줄일 수도 있다.



장점

1. 각각의 원소를 원소의 인덱스 값으로 바로 참조 가능하다.

2. 원소들을 임의로 접근할 수 있다.

3. 벡터 끝에 새로운 원소를 추가하거나 제거할 수 있다.



vector는 배열이 제공하는 거의 모든 기능을 다 가지고 있는데 vector 컨테이너의 크기는 쉽게 조정될 수 있기 때문에 매우 용이하다. 그러나 이러한 장점들 때문에 보통의 배열보다 더 많은 메모리 공간을 필요로 한다는 단점이 있다.


deque, list와 비교해 볼 때 vector는 원소에 접근하는 시간이나, 켄테이너 끝에 새로운 원소 삽입 및 삭제를 하는데 매우 효율적이다. 

반면, 중간에 원소를 삽입하는 작업은 deque나 list에 비해 느리다.



생성자


1. explicit vector( const Allocator& alloc = Allocator() );  

 - 기본 생성자이다. 비어있는 컨테이너를 만든다. 


2. explicit vector( size_type count, const T& value = T(), const Allocator& alloc = Allocator());

 - 값이 T인 원소를 n개 가지는 벡터 컨테이너를 생성한다. 


3. explicit vector( size_type count );

 - 값이 T인 원소를 생성한다. 


4. template< class InputIt > vector( InputIt first, InputIt last, const Allocator& alloc = Allocator() );

 - first부터 last까지 값들을 생성한다. 


5. vector( const vector& other );

 - 생성자를 복사한다.


6. vector( vector&& other )

 - 생성자를 옮긴다.


7. vector( std::initializer_list<T> init, const Allocator& alloc = Allocator() );





멤버 함수

1. v.assign(n,x) 

 - v에 x 값으로 n개의 원소를 할당한다 


2. v.assign(b,e) 

 - v를 반복자 구간 [b,e)로 할당한다 


3. v.at(i) 

 - v의 i번째 원소를 참조한다 


4. v.back() 

 - v의 마지막 원소를 참조한다 


5. p=v.begin() 

 - p는 v의 첫 원소를 가리키는 반복자 


6. x=v.capacity() 

 - x는 v에 할당된 공간의 크기 


7. v.clear()

 - v의 모든 원소를 제거한다


8. v.empty() 

 - v가 비었는지 조사한다 


9. p=v.end() 

 - p는 v의 끝을 표식하는 반복자 


10. p=v.erase(p) 

 - p가 가리키는 원소를 제거한다. q는 다음 원소를 가리킨다



int main()
{
	std::vector<int> vector;

	vector.reserve(3);

	vector.push_back(1);
	vector.push_back(2);
	vector.push_back(3);

	for (int i = 0; i < vector.size(); i++) {
		std::cout << vector[i] << std::endl;
	}

	//출력값 :
	//1
	//2
	//3

	return 0;
}
int main()
{
	std::vector<int> vector;
	vector.reserve(1);

	vector.push_back(1);
	vector.push_back(2);

	int a = vector.back();

	std::cout << a;

	//출력값 : 2

	return 0;
}


반응형