-
명품 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;elsecout << "입력 에러" << 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