У меня есть этот код C ++, который прекрасно работает при удалении последних 3 элементов списка, но мне было интересно, если это правильный способ сделать это, так как я боюсь удаления элементов с проблемами итераторов.Код в основном берет список из 6 элементов «Группы», делит его на 2 меньших списка «Group1» и «Group2», а затем сравнивает другой список «GroupToCompare» с «Group2» и, если они равны, удаляет последний3 элемента «Группы».
#include "pch.h"
#include <iostream>
#include <iostream>
#include <string>
#include <list>
using namespace std;
int main()
{
std::list <string> Groups = {};
Groups = { "Spike", "Jet", "Faye", "Edward", "Vincent", "Elektra" };
std::list<string> Group1 = {};
std::list<string> Group2 = {};
std::list<string> GroupToCompare = {};
GroupToCompare = { "Edward", "Vincent", "Elektra" };
size_t half1 = Groups.size() / 2;
std::list<std::string>::iterator ig = Groups.begin();
advance(ig, half1);
Group1.insert(Group1.end(), Groups.begin(), ig);
Group2.insert(Group2.end(), ig, Groups.end());
std::list<std::string>::iterator removeIt = Groups.begin();
advance(removeIt, half1);
cout << "List Elements 1: " << endl;
std::list<string>::iterator itrofList = Group1.begin();
string firstvar;
for (itrofList = Group1.begin(); itrofList != Group1.end(); ++itrofList) {
firstvar = *itrofList;
cout << "Item: " << firstvar << endl;
}
cout << "List Elements 2: " << endl;
std::list<string>::iterator itrofList1 = Group2.begin();
string firstvar1;
for (itrofList1 = Group2.begin(); itrofList1 != Group2.end(); ++itrofList1) {
firstvar1 = *itrofList1;
cout << "Item: " << firstvar1 << endl;
}
if (Group2 == GroupToCompare) {
removeIt = Groups.erase(removeIt);
removeIt = Groups.erase(removeIt);
removeIt = Groups.erase(removeIt);
}
cout << "List Elements of Groups after removing the last 3 elements: " << endl;
std::list<string>::iterator itrofList2 = Groups.begin();
string firstvar2;
for (itrofList2 = Groups.begin(); itrofList2 != Groups.end(); ++itrofList2) {
firstvar2 = *itrofList2;
cout << "Item: " << firstvar2 << endl;
}
}
Есть ли более правильный способ на случай, если я захочу удалить больше элементов в конце списка и избежать проблем с итераторами?Заранее спасибо!