Próbuję zrobić mały program, który przetwarza pliki INI, do użycia w późniejszym projekcie, najpierw zmniejszając jego rozmiar po załadowaniu do pamięci. ZatemUsuwanie pustych elementów z wektora ciągów znaków
gdzie VLINE jest wektor zawierający zawartość pliku
for (unsigned int i = 0; i < vLine.size(); i++)
{
if (!vLine[i].find(';', 0))
{
vLine[i].erase();
}
}
Upon drukowania VLINE, będę z lewej przestrzeni, gdzie kiedyś istniały wiersz rozpoczynający się średnikiem, takich jak
1.
2. property
3. property
4.
5. property
Użycie polecenia resize() powoduje usunięcie ostatniego elementu z listy zamiast usuwania pustych części. Ten sam problem istnieje, gdy usuwam linie, które zawierają tylko spacje z wymazaniem().
Czy można usunąć te puste elementy, zachowując kolejność vLine?
(Przeproszenia niestosowania iteratorami w tym.)
Re: (Przepraszam za nie za pomocą iteratorów w tym.) - Dlaczego nie używać iteratorów? –
Brak wiedzy na temat prawidłowego użytkowania. Wydaje się (wydawało się, że?) Można to zrobić bez nich. – JGrey
Możesz usunąć linie z wektora zamiast po prostu skasować zawartość ciągu (jak to robi 'vLine [i] .erase()', nie wywoływać 'vLine.erase()', ponieważ to usuwa z 'wektora' Następnie przepisz plik. Idiomatycznym sposobem na to jest C++ [idiotka-usuń idiom] (http://en.wikipedia.org/wiki/Erase-remove_idiom), ale chciałbyś użyć 'std :: remove_if 'from' 'używać warunkowego –
birryree