T>Всем привет. Вопрос : T>Почему этот долбаный STL не делает то, что нужно?
T>std::string ds_host_path="hello\\"; T>std::remove(--ds_host_path.end(),ds_host_path.end(),'\\');
T>?? Почуму не работает??
T>Пробовал и так :
T>basic_string <char>::iterator str_Iter=ds_host_path.end();
T> str_Iter--; T> std::remove(str_Iter,ds_host_path.end(),'\\');
T>То же самое...
А хелп почитать?
std::remove передвигает все удаляемые символы в конец и возвращает итератор указывающий на первый элемент, который надо удалить.
Здравствуйте, tantrum, Вы писали:
T>std::string ds_host_path="hello\\"; T>std::remove(--ds_host_path.end(),ds_host_path.end(),'\\');
Для std::string::iterator может быть не встроенным типом, поэтому писать --e.end() не желательно (даже если это работает сейчас, при смене компилятора/стандартной библиотеки может не скомпилироваться), следует писать e.end() — 1.
Для bidirectional iterators следует писать boost::prior(e.end()).
Здравствуйте, LuciferMoscow, Вы писали:
LM>А хелп почитать? LM>std::remove передвигает все удаляемые символы в конец
Это неправильная формулировка. std::remove передвигает все элементы, которые остаются, в начало; а что происходит с удаляемыми, не определено. Некоторых из них перезапишут остающимися, некоторых оставят на месте. Перемещением их точно никто заниматься не будет.
LM>и возвращает итератор указывающий на первый элемент, который надо удалить.
Здравствуйте, Pavel Chikulaev, Вы писали:
PC>Здравствуйте, tantrum, Вы писали:
T>>std::string ds_host_path="hello\\"; T>>std::remove(--ds_host_path.end(),ds_host_path.end(),'\\');
PC>Для std::string::iterator может быть не встроенным типом, поэтому писать --e.end() не желательно (даже если это работает сейчас, при смене компилятора/стандартной библиотеки может не скомпилироваться), следует писать e.end() — 1. PC>Для bidirectional iterators следует писать boost::prior(e.end()).
PC>А вообще читай почаще доки...
ЭЭЭ..блин. действительно я невнимательный.
Спасибо....