front(), back()

김민수·2025년 1월 10일

C++

목록 보기
54/68

front()back() 함수는 STL 컨테이너(벡터, 리스트, 데크, 문자열 등)에서 첫 번째 요소마지막 요소에 접근할 때 사용하는 함수다. 두 함수 모두 상수 시간 O(1)에 동작하며, 직접 인덱스를 사용할 필요 없이 직관적으로 가장 앞과 뒤의 요소를 참조할 수 있는 장점이 있다.


1. 정의

T& front();
const T& front() const;

T& back();
const T& back() const;
  • front(): 컨테이너의 첫 번째 요소에 대한 참조를 반환한다.
  • back(): 컨테이너의 마지막 요소에 대한 참조를 반환한다.
  • const 버전은 읽기 전용 참조를 반환하며, non-const 버전은 요소를 수정할 수 있다.


2. 사용 가능한 컨테이너

front()back() 함수는 다음 컨테이너에서 사용할 수 있다:

  • std::vector
  • std::list
  • std::deque
  • std::string

주의: std::array에서도 사용할 수 있지만, std::set, std::map, std::unordered_set, std::unordered_map에서는 사용할 수 없다.



3. 예제 코드

벡터에서 front()와 back() 사용

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {10, 20, 30, 40};

    std::cout << "첫 번째 요소: " << vec.front() << std::endl;
    std::cout << "마지막 요소: " << vec.back() << std::endl;

    // 요소 수정
    vec.front() = 100;
    vec.back() = 400;

    std::cout << "수정 후 첫 번째 요소: " << vec.front() << std::endl;
    std::cout << "수정 후 마지막 요소: " << vec.back() << std::endl;

    return 0;
}

출력:

첫 번째 요소: 10
마지막 요소: 40
수정 후 첫 번째 요소: 100
수정 후 마지막 요소: 400

리스트에서 front()와 back() 사용

#include <iostream>
#include <list>

int main() {
    std::list<int> lst = {5, 15, 25, 35};

    std::cout << "첫 번째 요소: " << lst.front() << std::endl;
    std::cout << "마지막 요소: " << lst.back() << std::endl;

    // 요소 수정
    lst.front() = 50;
    lst.back() = 350;

    std::cout << "수정 후 첫 번째 요소: " << lst.front() << std::endl;
    std::cout << "수정 후 마지막 요소: " << lst.back() << std::endl;

    return 0;
}

출력:

첫 번째 요소: 5
마지막 요소: 35
수정 후 첫 번째 요소: 50
수정 후 마지막 요소: 350

문자열에서 front()와 back() 사용

#include <iostream>
#include <string>

int main() {
    std::string str = "hello";

    std::cout << "첫 번째 문자: " << str.front() << std::endl;
    std::cout << "마지막 문자: " << str.back() << std::endl;

    // 문자 수정
    str.front() = 'H';
    str.back() = '!';

    std::cout << "수정 후 문자열: " << str << std::endl;

    return 0;
}

출력:

첫 번째 문자: h
마지막 문자: o
수정 후 문자열: Hell!

4. 예외 처리

  • 빈 컨테이너에서 front() 또는 back()을 호출하면 정의되지 않은 동작(UB)이 발생한다.
  • 따라서 호출 전에 컨테이너가 비어 있는지 반드시 확인하는 것이 좋다.
#include <iostream>
#include <vector>

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

    if (!vec.empty()) {
        std::cout << "첫 번째 요소: " << vec.front() << std::endl;
        std::cout << "마지막 요소: " << vec.back() << std::endl;
    } else {
        std::cout << "벡터가 비어 있습니다." << std::endl;
    }

    return 0;
}
profile
안녕하세요

0개의 댓글