見出し画像

2024-07-11C++プログラミング練習

こんばんわ。ケロッグです。
今日も独習C++を読みながら学んだ構文を使って、ChatGPTに出してもらった問題を解きます。
最近独習C++は停滞気味で、やっと6章に入ることができました。7月中に終わらせる予定が、いよいよ厳しくなってきました💦
頑張ります。

https://chatgpt.com/share/e113e849-302f-4ef1-a9ea-30658587e444

今回は右辺値参照を学んだので、これを取り入れた問題を出してもらったのですが、プログラムを書いている途中に右辺値参照を使わなくてもいいことに気づき、結局使いませんでした笑

今回作ったプログラムはこちらです。

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

class DataItem{
  std::string Data;
  int Id;
  std::string Date;

public:
  DataItem(std::string data, int id, std::string date)
    :Data(data),Id(id),Date(date){}

  std::string getData(){return Data;}
  int getId(){return Id;}
  std::string getDate(){return Date;}

};

class DataCollection{
  std::vector<DataItem*> items;

public:
  ~DataCollection(){
    for(auto& item : items){
      delete item;
    }
    items.clear();
  }
  
  void addItem(DataItem* item){
    items.push_back(item);
  }
  void removeItem(const std::string& data_name){
    items.erase(std::remove_if(items.begin(), items.end(), [&data_name](DataItem* it){return it->getData() ==data_name;}),items.end());
 
      std::cout<<data_name<<"を消去しました。"<<"\n"<<std::endl;
  }

  int findItem(const std::string& data_name){
    for(auto& it : items){
      if(it->getData() == data_name){
	std::cout<<data_name<<"の情報"<<std::endl;
	std::cout<<"ID:"<<it->getId()<<std::endl;
	std::cout<<"Date:"<<it->getDate()<<std::endl;
	std::cout<<""<<std::endl;
	return 0;
      }
    }
    std::cout<<data_name<<"は見つかりませんでした。"<<"\n"<<std::endl;
    return -1;
  }

  void printAllItems(){
    std::cout<<"全ての情報を開示します。"<<std::endl;
    for(auto& it : items){
      std::cout<<"データ名:"<<it->getData()<<std::endl;
      std::cout<<"ID:"<<it->getId()<<std::endl;
      std::cout<<"日付:"<<it->getDate()<<"\n"<<std::endl;
    }
  } 
  
};

int main(){
  DataCollection collection;

  collection.addItem(new DataItem("AI",100,"2024-07-01"));
  collection.addItem(new DataItem("Deep Learning",200,"2024-07-02"));
  collection.addItem(new DataItem("Neural Network",300,"2024-07-03"));

  collection.removeItem("Deep Learning");
  collection.printAllItems();
  collection.findItem("Neural Network");

  return 0;
}

集めた情報の名前と日付とIDの操作をするプログラムです。
最近この手のクラスやベクター、参照を使った型推論など、同じようなのばかり使っているのでさすがに慣れてきました。
出力は以下のようになります。

独習C++の6章からは演算子のオーバーロードに入っていくので、様々なオーバーロードを駆使したプログラムを作っていきたいです。


この記事が気に入ったらサポートをしてみませんか?