#include <iostream>
#include <memory>
#include <list>

class Record{
    private:
        int value;
    public:
    Record(int value){
        this->value=value;
    }
    int getValue(){
        return this->value;
    }
};


void printSize(std::list<std::shared_ptr<Record>> list){
    long size=0;
    for (std::shared_ptr<Record> record: list)
    {
        size+=sizeof(record.get());
    }
    std::cout<<"size of list: "<<size<<std::endl;
    
}
void printList(std::list<std::shared_ptr<Record>> list){
    std::cout<<"List: ";
    for (std::shared_ptr<Record> record: list)
    {
         std::cout<<record.get()->getValue()<<" ,";
    }
    std::cout<<std::endl;
    
}

int main(){
    std::list<std::shared_ptr<Record>> list;
    for (size_t i = 0; i < 20; i++)
    {
       list.push_back(std::make_shared<Record>(Record((int)i)));
    }
    printList(list);
    printSize(list);
    std::cout<<"Removing 10"<<std::endl;
    list.remove_if([](std::shared_ptr<Record> rec){return rec.get()->getValue()==10;});
     printList(list);
    printSize(list);
} 