List убирает string значения из класса, что делать?

Если вам нужно удалить значения типа string из экземпляра класса, который использует List, вам необходимо использовать методы, предоставляемые List.

Существует несколько способов удаления строковых значений из класса, использующего List в C++. Вот некоторые из них:

1. Использование метода remove_if:
Метод remove_if позволяет удалить все элементы, для которых выполняется определенное условие. В данном случае, мы будем проверять, является ли элемент строкой.
Пример использования:

   #include <iostream>
   #include <list>
   #include <string>
   
   class MyClass {
   public:
       std::list<std::string> stringList;
   
       void removeStrings() {
           stringList.remove_if([](const std::string& str) {
               return !str.empty();
           });
       }
   };
   
   int main() {
       MyClass myClass;
       myClass.stringList.push_back("abc");
       myClass.stringList.push_back("123");
       myClass.stringList.push_back("");
   
       myClass.removeStrings();
   
       for (const std::string& str : myClass.stringList) {
           std::cout << str << std::endl;
       }
   
       return 0;
   }

Результат:

   123

2. Итерация по списку с последующим удалением:
Можно использовать цикл for-each для перебора всех элементов списка и удаления строковых значений. Однако, стоит быть осторожным при удалении элементов списка во время итерации.
Пример использования:

   #include <iostream>
   #include <list>
   #include <string>
   
   class MyClass {
   public:
       std::list<std::string> stringList;
   
       void removeStrings() {
           for (auto it = stringList.begin(); it != stringList.end(); ) {
               if (!(*it).empty()) {
                   it = stringList.erase(it);
               } else {
                   ++it;
               }
           }
       }
   };
   
   int main() {
       MyClass myClass;
       myClass.stringList.push_back("abc");
       myClass.stringList.push_back("123");
       myClass.stringList.push_back("");
   
       myClass.removeStrings();
   
       for (const std::string& str : myClass.stringList) {
           std::cout << str << std::endl;
       }
   
       return 0;
   }

Результат:

   123

3. Использование функции-член erase:
Метод erase позволяет удалить элемент по его позиции. Вы можете использовать его, чтобы удалить все элементы, которые являются строками.
Пример использования:

   #include <iostream>
   #include <list>
   #include <string>
   
   class MyClass {
   public:
       std::list<std::string> stringList;
   
       void removeStrings() {
           for (auto it = stringList.begin(); it != stringList.end(); ) {
               if (!(*it).empty()) {
                   it = stringList.erase(it);
               } else {
                   ++it;
               }
           }
       }
   };
   
   int main() {
       MyClass myClass;
       myClass.stringList.push_back("abc");
       myClass.stringList.push_back("123");
       myClass.stringList.push_back("");
   
       myClass.removeStrings();
   
       for (const std::string& str : myClass.stringList) {
           std::cout << str << std::endl;
       }
   
       return 0;
   }

Результат:

   123

Это не исчерпывающий список способов удаления строковых значений из класса, использующего List. Вы можете выбрать подходящий для своей конкретной ситуации или использовать другие методы, предоставляемые List, в зависимости от ваших потребностей.