💡 퀵 접속: cpp.kr/replace

replace

C++ 표준 라이브러리의 알고리즘으로, 주어진 범위에서 특정 값을 가진 요소들을 새로운 값으로 대체합니다. replace는 원본 범위를 직접 수정하며, 모든 일치하는 요소들을 새로운 값으로 변경합니다.

기본 사용법

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> numbers = {1, 2, 3, 2, 4, 2, 5};
    
    std::cout << "원본 벡터: ";
    for (int n : numbers) std::cout << n << " ";
    std::cout << std::endl;
    
    // 값이 2인 요소들을 0으로 대체
    std::replace(numbers.begin(), numbers.end(), 2, 0);
    
    std::cout << "2를 0으로 대체한 후: ";
    for (int n : numbers) std::cout << n << " ";
    std::cout << std::endl;
    
    return 0;
}

실행 결과:

원본 벡터: 1 2 3 2 4 2 5
2를 0으로 대체한 후: 1 0 3 0 4 0 5

문자열에서 사용

#include <iostream>
#include <string>
#include <algorithm>

int main() {
    std::string text = "Hello, World!";
    
    std::cout << "원본 문자열: " << text << std::endl;
    
    // 공백을 언더스코어로 대체
    std::replace(text.begin(), text.end(), ' ', '_');
    
    std::cout << "공백을 언더스코어로 대체한 후: " << text << std::endl;
    
    return 0;
}

실행 결과:

원본 문자열: Hello, World!
공백을 언더스코어로 대체한 후: Hello,_World!

사용자 정의 타입에서 사용

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

class Person {
    std::string name;
    int age;
public:
    Person(const std::string& n, int a) : name(n), age(a) {}
    
    bool operator==(const Person& other) const {
        return name == other.name && age == other.age;
    }
    
    void print() const {
        std::cout << name << " (" << age << "세)" << std::endl;
    }
};

int main() {
    std::vector<Person> people = {
        Person("Alice", 20),
        Person("Bob", 30),
        Person("Alice", 20),
        Person("Charlie", 25),
        Person("Alice", 20)
    };
    
    std::cout << "원본 목록:" << std::endl;
    for (const auto& person : people) {
        person.print();
    }
    
    // Alice(20세)를 Eve(22세)로 대체
    Person old_person("Alice", 20);
    Person new_person("Eve", 22);
    std::replace(people.begin(), people.end(), old_person, new_person);
    
    std::cout << "\nAlice(20세)를 Eve(22세)로 대체한 후:" << std::endl;
    for (const auto& person : people) {
        person.print();
    }
    
    return 0;
}

실행 결과:

원본 목록:
Alice (20세)
Bob (30세)
Alice (20세)
Charlie (25세)
Alice (20세)

Alice(20세)를 Eve(22세)로 대체한 후:
Eve (22세)
Bob (30세)
Eve (22세)
Charlie (25세)
Eve (22세)

참고사항

  • replace는 algorithm 헤더에 정의되어 있습니다.
  • 원본 범위를 직접 수정합니다.
  • 시간 복잡도는 O(n)입니다.
  • 모든 일치하는 요소들이 새로운 값으로 대체됩니다.
  • 요소의 순서는 유지됩니다.
  • 예외 안전성을 보장합니다.
  • replace_if는 조건을 만족하는 요소들을 대체하는 버전입니다.
  • replace_copy는 원본을 수정하지 않고 결과를 다른 범위에 복사하는 버전입니다.
함수 설명
replace(first, last, old_value, new_value) 범위 [first, last)에서 old_value와 같은 요소들을 new_value로 대체