C++

C++) Vector function

나무늘보섬 2024. 7. 13. 19:59

Deletion

  • erase : vector의 요소 제거, 범윌도 제거가 가능
  • 더보기
    #include <iostream>
    #include <vector>

    int main() {
        std::vector<int> vec = {1, 2, 3, 4, 5};
        
        // 요소 하나 제거
        vec.erase(vec.begin() + 2);  // {1, 2, 4, 5}

        // 범위 제거
        vec.erase(vec.begin(), vec.begin() + 2);  // {4, 5}

        for(int n : vec) {
            std::cout << n << ' ';
        }
        return 0;
    }

 

 


Assertion

  • push_back : vector 끝에 요소를 추가 (복사해서 추가, queue의 push와 같은 작업)
  • 더보기
    int main() {
        std::vector<Person> people;
        
        Person p1("Alice", 30);
        people.push_back(p1);  // 복사 또는 이동 연산 발생

        Person p2("Bob", 25);
        people.push_back(std::move(p2));  // 이동 연산 발생

        for(const auto& person : people) {
            std::cout << person.name << " " << person.age << std::endl;
        }

        return 0;
    }

 

  • emplace_back : vector끝에 요소를 추가하는데 직접 생성해서 추가 (복사 추가 X)
  • 더보기
    int main() {
        std::vector<Person> people;
        
        people.emplace_back("Alice", 30);  // 직접 생성
        people.emplace_back("Bob", 25);    // 직접 생성

        for(const auto& person : people) {
            std::cout << person.name << " " << person.age << std::endl;
        }

        return 0;
    }

 

  • emplace : vector에서 지정하는 위치를 추가하는 함수 (emplace_back과 동작은 같음)
  • 더보기
    int main() {
        std::vector<Person> people;
        
        people.emplace(people.end(), "Alice", 30);  // 특정 위치에 직접 생성
        people.emplace(people.end(), "Bob", 25);    // 특정 위치에 직접 생성

        for(const auto& person : people) {
            std::cout << person.name << " " << person.age << std::endl;
        }

        return 0;
    }

 

  • insert : vector의 특정 위치에 요소 삽입, 가변인자로서 동작.

 

push_back  vs  emplace_back,  emplace

  • 객체를 생성하고 난 후, push_back을 통해서 컨테이너에 정보를 추가하는 방식
  • 2번의 과정이 필요한 것이 push_back

 

  • push_back과 달리, 매개변수가 가변인자이기 때문에, 유연하게 객체 생성이 가능함.
  • 객체를 직접 생성하고 나서 추가까지 한 번의 과정으로 이루어지는 방식이 emplace_back, emplace 
  • 단, emplace는 특정 위치에 추가하는 것이므로 위치 값이 매개변수로써 필요함.

 

 

 

참고자료

- https://cplusplus.com/