IT 프로그래밍/C++

vector insert, erase 정리

기술1 2024. 3. 25. 21:50
반응형

vector의 맨 뒤에 원소를 삽입할 대는 push_back을 삽입합니다.

 

그러면 맨 앞이나 혹은 가운데에 삽입하려면 어떤 것을 사용해야 할까요? 그리고 원소를 삭제하려면 어떠한 원소를 사용해야 할까요?

 

배열이라면 배열 자체가 특별한 기능을 제공해주는 것은 없습니다. 그 위치부터 끝까지 저장되어 있는 데이터를 이동을 시키고 빈칸으로 만든 다음 새로운 데이터를 써주는 방법 있는데요.

 

배열에 데이터를 저장한다고 했을 때 빈칸없이 저장하는 것이 배열을 사용할 때 다른 부분에서 사용할 때 고려해서 코딩을 해야되기 때문에 예외적인 경우라고 볼 수 있고, 앞에서 꽉꽉 찬 상태를 유지해야한다면 다른 데이터를 옮겨오거나 한칸씩 땡기는 작업을 직접 다 해야하는 경우입니다. 

 

vector는 이런 일들에 대해서 기능을 제공하기 때문에 배열보다 훨씬 편하게 사용할 수 있습니다. 그런 일을 하기 위해서는 

 

iterator


바로 이 iterator를 사용하는 것입니다. 벡터의 위치에 무엇을 삽입하고 삭제하기 위해서는 이것을 사용하는 것이며 C언어에는 없는 것입니다. 

 

 iterator는 벡터에 대해서 좀 더 다양한 작업을 할 수 있으며 컨테이너에도 동일한 인터페이스를 제공하는 것입니다. 벡터 내의 특정 위치를 가리키는 포인터라고 생각해도 됩니다. 

 

iterator 선언 

vector::begin()은 벡터의 첫 번째 원소를 가리키는 iterator를 생성해 주며

vector::end()는 마지막 원소의 다음 위치를 가리키는 iterator를 생성해 줍니다. 

 

#include <iostream>
#include <vector>
using namespace std;

int main()
{
	vector<int> v;
	for (int i = 0; i < 4; i++)
		v.push_back(i + 1);

	vector<int>::iterator it;
	it = v.begin();

	//iterator의 증가 
	it++;

	//iterator를 이용한 원소 읽기/쓰기
	int n = *it;
	cout << n << endl;

	*it = n * 2;
	for (auto x : v)
		cout << x << " ";
	cout << endl;
}

이런식으로 vector에 it를 넣어줄  수 있는데요.

 

처음에 it는 0의 vector 부터 시작하며 it++ 증가합니다. int n = *(it;가 되며 이 값은 2에 해당합니다. n을 출력한다면 2가 출력될 것입니다. v는 1 2 3 4라는 가정입니다. c언어를 배운 분이라면 *가 포인트와 같다는 것을 알 수 있는데요. 사용자 입장에서 포인터라고 사용하셔도 괜찮기는 하나 iterator는 포인터 보다 더 많은 일을 작업합니다. 

 

Insert 메서드


메서드를 통해 배열에 추가를 해줄 수 있습니다. 배열과는 달리 vector에는 insert를 통해 쉽게 해줄 수 있는 것입니다. 

	v.insert(it, 100);
	for (auto x : v)
		cout << x << " ";
	cout << endl;
	cout << *it << endl;

insert는 이렇게 사용하시면 됩니다. insert(넣어줄 곳, 넣어줄 수) 이런 식으로 해주시면 되는데요. 그러면 정상적으로 위치하게 됩니다. 

 

Erase 메서드


it = v.erase(it);
for (auto x : v)
	cout << x << " ";
cout << endl;
cout << *it << endl;

삭제해주는 메서드입니다. v.erase를 해주시면 되는데요. 그럼 해당 it 자리에 있던 vector를 삭제해주는 것입니다. it는 삭제된 다음 원소를 가리키게 됩니다. 따라서 *it를 출력하면 erase 하기 전 바로 뒤에 있던 vector를 출력해줍니다. 

 

 

반응형

'IT 프로그래밍 > C++' 카테고리의 다른 글

C++ [포인터 개념 정리]  (0) 2024.03.26
벡터의 순회  (0) 2024.03.25
[따배시 6.5] 정적 다차원 배열  (0) 2024.03.25
[따배시 5.7 ~ 5.8] 반복문 for, break, continue  (0) 2024.03.23
[따배시 5.4] goto 반복문 while  (0) 2024.03.23