ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 명품 C++ 10장 15번
    C++ 2018. 11. 17. 05:08

    15. vector를 이용하여 아래 Circle 클래스의 객체를 삽입하고 삭제하는 프로그램을 작성하라. 삭제 시에는 이름이 같은 모든 원을 삭제한다.


    소스코드


    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;
    class Circle {
        string name; // 이름
        int radius; // 반지름
    public:
        Circle(int radius, string name) {
            this->radius = radius; this->name = name;
        }
        double getArea() { return 3.14*radius*radius; }
        string getName() { return name; }
    };
    int main() {
        vector<Circle*> v;
        cout << "원을 삽입하고 삭제하는 프로그램입니다." << endl;
        while (true) {
            cout << "삽입:1, 삭제:2, 모두보기:3. 종료:4 >> ";
            int num;
            cin >> num;
            if (num == 1) { // 삽입
                int r;
                string n;
                cout << "생성하고자 하는 원의 반지름과 이름은 >>";
                cin >> r >> n;
                v.push_back(new Circle(r, n)); // 새로운 객체를 생성 후 벡터에 삽입
            }
            else if (num == 2) {
                cout << "삭제하고자 하는 원의 이름은 >> ";
                string n;
                cin >> n;
                vector<Circle*>::iterator it; // 삭제를 위한 포인터
                it = v.begin();
                for (int i = 0; i < v.size(); ++i) {
                    if (v[i]->getName() == n) // 입력된 이름과 같은 원이 있다면
                        it = v.erase(it); // 삭제 후 다음 객체를 가리킴
                    else
                        ++it;
                }
            }
            else if (num == 3) { // 모두 보기
                for (int i = 0; i < v.size(); ++i)
                    cout << v[i]->getName() << endl;
            }
            else if (num == 4)
                break;
            else
                cout << "입력 에러" << endl;
        }
    }


    실행결과



    벡터 컨테이너이 원소 삭제를 위해서는 iterator을 사용해야 합니다.


    'C++' 카테고리의 다른 글

    명품 C++ 10장 Open Challenge  (0) 2018.11.17
    명품 C++ 10장 16번  (0) 2018.11.17
    명품 C++ 10장 14번  (0) 2018.11.17
    명품 C++ 10장 13번  (0) 2018.11.17
    명품 C++ 10장 12번  (0) 2018.11.17

    댓글

© 2018 TISTORY. All rights reserved.