To jest dokładnie to, o co chodzi w funkcji resize dla std::string w C++. Jeśli podany parametr n jest mniejszy od aktualnej długości łańcucha, to obcinamy stringa do tych właśnie n znaków – reszta znika bezpowrotnie. Moim zdaniem to bardzo wygodne, bo nie trzeba ręcznie wycinać fragmentu czy bawić się w operacje na podłańcuchach. Praktycznie rzecz biorąc, można dzięki temu szybko skrócić dane wejściowe, np. gdy pobieramy z pliku długi tekst, a potrzebujemy tylko jego fragment do dalszego przetwarzania. W branży często się to przydaje – na przykład ograniczając długość nicku użytkownika do określonej liczby znaków lub przytrzymując długość serializowanych danych w protokołach sieciowych. Resize działa wprost i zgodnie ze standardem C++, usuwając znaki od indeksu n wzwyż. Co ciekawe, metoda nie tylko skraca, ale też rozszerza string – wtedy wypełnia go nowymi znakami (np. 'x' czy znakiem pustym), ale to właśnie skracanie jest często pomijane przez początkujących, a jest naprawdę przydatne. No i trzeba pamiętać, że oryginalne znaki spoza zakresu po prostu znikają – nie ma żadnych ostrzeżeń. Z mojego doświadczenia to jedna z tych funkcji, do których z czasem nabiera się szacunku – bo ułatwia życie na co dzień przy operacjach na łańcuchach znaków.
Wydaje mi się, że sporo osób myli tutaj parametry n i c, co jest dość typowe, gdy zaczyna się przygodę z C++. Funkcja resize bierze dwa parametry, ale tylko pierwszy z nich – n – decyduje o nowej długości stringa. Wielu myśli, że parametr c (czyli znak wypełnienia) może wpływać na skracanie łańcucha, ale tak nie jest. On służy tylko wtedy, gdy potrzebujemy wydłużyć string – nowe miejsca są wtedy wypełniane podanym znakiem, ale nie mają żadnego znaczenia przy obcinaniu tekstu. Często też spotykam się z pomysłem, że string zostanie skrócony, kiedy c jest mniejsze lub większe od długości łańcucha – to niestety zupełnie nietrafione, bo c po prostu nie służy do porównań liczbowych, a jedynie do dopełniania. Jeszcze innym, często spotykanym błędem, jest mylenie operacji skracania i wydłużania – resize skraca tylko wtedy, gdy n jest mniejsze od obecnej długości. Gdyby n było większe, string się wydłuży, co też bywa mylące. Moim zdaniem trzeba po prostu zapamiętać, że resize zawsze traktuje n jako żądaną nową długość i nie interesuje go, czy n jest parametrem mniejszym, czy większym – zawsze dopasowuje długość do tej wartości. Dobra praktyka nakazuje więc wyraźnie sprawdzać, ile znaków ma string przed wywołaniem resize, żeby nie zgubić danych przez przypadek. Wreszcie, niektórzy mylą te operacje z funkcją substr czy erase, ale resize to zupełnie inna para kaloszy i warto ją dobrze zrozumieć, żeby nie popełniać niepotrzebnych błędów przy manipulacji tekstem.