SCO*_*SCO 3 c++ string iterator
让我们假设如下:
string s("!Hello!'");
Run Code Online (Sandbox Code Playgroud)
我的目的是在s变量中获取只有"Hello"字符串,IOW我想删除感叹号.
我尝试了以下方法:
std::remove ( s.begin(), s.end(), '!' );
Run Code Online (Sandbox Code Playgroud)
当我得到结果的字符串时,我得到:
Helloo!
Run Code Online (Sandbox Code Playgroud)
"!" 字符已被删除,但字符串的末尾未被移动.
我已经读过我需要从std :: remove的返回值中获取一个迭代器,但我是C++的新手,并没有成功.
我希望像char :: iterator这样的东西是有效的,但似乎不是......所以
char::iterator new_end;
new_end = std::remove ( s.begin(), s.end(), '!' );
cout << new_end ;
Run Code Online (Sandbox Code Playgroud)
没有成功.
任何帮助/指针将不胜感激!
std::remove对迭代器而不是容器进行操作.因此,它无法调整容器的大小.
你应该使用erase-remove成语:
s.erase(std::remove(s.begin(), s.end(), '!'), s.end());
Run Code Online (Sandbox Code Playgroud)
在这里,remove实现删除逻辑并将迭代器返回到序列中的新的最后一个元素 - 换句话说,它重新排序元素但不触及容器.erase最后,通过将其结束设置为remove返回的大小来调整容器的大小.
| 归档时间: |
|
| 查看次数: |
595 次 |
| 最近记录: |