그냥 게임개발자

[C++] vector - 함수들 본문

내 개인적인 공부/자료구조

[C++] vector - 함수들

sudoju 2024. 4. 13. 13:40

 

vector의 함수들은 여러가지가 있어요.

push_back
pop_back
erase
find
clear
fill

 

이렇게 자주 사용하는 함수들이 있는데 물론 더 있는데 그건 직접 하면서 공부해보길!

재미없는 것부터 배우면 재미가 없어요.

어차피 배울 거 산더미인데

쉬운 것부터 배워요

쉬운 것부터

 

우리가 배워야 할 양들

저것보다 더 많을지도

 

그래서 하나하나 간단명료하게 설명하겠습니다.

 

근데 참 보면 평일에 쓰는 글들과 주말에 쓰는 글들의 퀄리티를 보면 주말이 확실히 더 좋은 듯 싶어요.

 

push_back()

vector의 뒤에서부터 요소를 더해요.

물론 emplace_back()도 뒤에서부터 요소를 더하는 함수입니다.

emplcae_back()이 더 빠른데 시간차이는 그리 엄청나지는 않으니 편한 거 사용하시면 될 듯합니다.

 

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec;
    
    vec.push_back(1);
    
    for (int i : vec)
        cout << i << ' ';
        
    cout << '\n';
    
    vec.emplace_back(2);
    
    for (int i : vec)
        cout << i << ' ';
    
    cout << '\n';
    
    return 0;
}

 

음 결과물은 안봐도 보이시죠

1

1, 2 

이렇게 나옵니다.

 

 

pop_back()

다음은 pop_back입니다.

이것은 엄청 간단

vector의 맨 뒤에있는 요소를 제거합니다.

 

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec;
    
    vec.push_back(1);
    
    for (int i : vec)
        cout << i << ' ';
        
    vec.pop_back();
    
    for (int i : vec)
        cout << i << ' ';
        
    cout << '\n';
    
    return 0;
}

 

이러면 값은

1

 

이러고 끝나겠죠.

 

 

erase()

erase는 vector의 요소를 지우는 역할을 하는 함수입니다.

예를들어 한 요소만 지운다면 erase(이터레이터)로 쓰이지만 어디서 어디까지 지운다라는것으로 사용한다면

erase(from, to)로 사용하면 됩니다.

 

물론 to에 5를 넣었다면 4번째까지 지워집니다.

to 까지가 아닌 to 이전까지 지우는 것으로 생각하면 편합니다.

 

한 번 erase를 사용해봅시다.

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec;
    
    for (int i = 1; i <= 5; ++i)
    {
        vec.push_back(i);
    }
    
    // 1, 2, 3, 4, 5
    for (int i : vec)
        cout << i << " ";
        
    cout << '\n';
    
    // 3의 이터레이터를 찾음
    vector<int>::iterator findIt = find(vec.begin(), vec.end(), 3);
    
    // 못찾을 수도 있으니 검사
    if (findIt == vec.end())
    {
        cout << "Not Found FindIt " << '\n';
        return 0;
    }
    
    vec.erase(findIt);
    
    // 1, 2, 4, 5
    for (int i : vec)
        cout << i << " ";
        
    cout << '\n';
    
    vec.erase(vec.begin(), vec.begin() + 2);
    
    // 4, 5
    for (int i : vec)
        cout << i << " ";
        
    cout << '\n';
}

 

예상 결과값을 주석으로 처리해봤는데 맞는지 확인해봅시다.

 

어우 대견해라.

그리고 지금 저기서는 find라는 함수를 통해 이터레이터를 반환했지만

이렇게 해도 된다.

vec.erase(vec.begin() + 2);

시작점부터 2번째 위치 0, 1, 2 번째의 값을 지운다.

이런식으로 활용해도 좋습니다.

 

어우 간단 명료하게 쓸려고 했는데 뭔가 길어지네요.

 

erase의 내부를 보면 이런식이에요.

iterator erase (const_iterator position);                       // 한 요소
iterator erase (const_iterator first, const_iterator last);	// from - to

 

 

find(from, to, value)

vector의 함수는 아니고 STL 함수입니다.

from - to에서 value를 찾아 이터레이터를 반환하는 함수입니다.

 

vector내의 요소들을 찾고 싶을 때 이 함수를 사용하면 됩니다.

O(n)의 시간 복잡도를 가져요.

 

사용 방식은 아래와 같아요.

 

auto findIt = find(from, to, value);

 

 

clear()

vector의 모든 요소를 지워요.

capacity랑은 달라요.

vector의 요소를 지우는 거지 vector가 할당한 메모리를 지우는게 아니에요!!

 

fill(from, to, value)

vector에 어떠한 value값을 할당하고 싶으면 fill을 써서 채웁니다.

fill(from, to, value);

 

아 여기서 또한 from ~ to 지만 to는 포함되지 않고 이전까지만 채웁니다.

 

끝~

'내 개인적인 공부 > 자료구조' 카테고리의 다른 글

vector를 통해서 2차원 배열 만들기  (0) 2024.04.13
vector의 정적할당?  (0) 2024.04.13
for in range  (0) 2024.04.13
C++ - vector  (1) 2024.04.13
자료구조란?  (0) 2024.04.12