STL remove
От: tantrum США  
Дата: 27.10.05 13:11
Оценка: -2 :)
Всем привет. Вопрос :
Почему этот долбаный STL не делает то, что нужно?

std::string ds_host_path="hello\\";
std::remove(--ds_host_path.end(),ds_host_path.end(),'\\');

?? Почуму не работает??

Пробовал и так :

basic_string <char>::iterator str_Iter=ds_host_path.end();

str_Iter--;
std::remove(str_Iter,ds_host_path.end(),'\\');

То же самое...
Re: STL remove
От: LuciferMoscow Россия  
Дата: 27.10.05 13:14
Оценка:
Здравствуйте, tantrum, Вы писали:


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 передвигает все удаляемые символы в конец и возвращает итератор указывающий на первый элемент, который надо удалить.
Re: STL remove
От: Pavel Chikulaev Россия  
Дата: 27.10.05 13:45
Оценка:
Здравствуйте, 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()).

А вообще читай почаще доки...
Re[2]: STL remove
От: Centaur Россия  
Дата: 27.10.05 15:56
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>А хелп почитать?

LM>std::remove передвигает все удаляемые символы в конец

Это неправильная формулировка. std::remove передвигает все элементы, которые остаются, в начало; а что происходит с удаляемыми, не определено. Некоторых из них перезапишут остающимися, некоторых оставят на месте. Перемещением их точно никто заниматься не будет.

LM>и возвращает итератор указывающий на первый элемент, который надо удалить.
Re[2]: STL remove
От: tantrum США  
Дата: 27.10.05 18:49
Оценка:
Здравствуйте, 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>А вообще читай почаще доки...


ЭЭЭ..блин. действительно я невнимательный.
Спасибо....
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.