请教迭代器的解引用问题。

topcs 2008-12-08 09:25:34
代码如下:
void TextQuery::filter_text()
{
if ( filt_elems.empty() )return;
vector<string> *words = text_locations ->first;
vector<string>::iterator iter = words ->begin();
vector<string>::iterator iter_end = words ->end();
while ( iter != iter_end )
{
string::size_type pos = 0;
while (( pos = (*iter).find_first_of( filt_elems, pos ))!= string::npos )
(*iter).erase(pos,1);
++iter;
}
}

问题是find_first_of和erase不是string的方法吗,(*iter)得到的是什么呢?谢谢。
...全文
580 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
topcs 2008-12-09
  • 打赏
  • 举报
回复
谢谢各位!
“这个地方容器是vector <string>,是一个vector容器,内部元素为string,所以*iter就是一个string类型的元素”,
我开始误以为*iter得到的是char,我把字符串数组和vector <string>搞混了。
yshuise 2008-12-09
  • 打赏
  • 举报
回复
*是一种重载,在其他容器尤其如此。而不是指针所谓的解引用,是操作符重载,最后
得到的是容器中存放的元素。
qqwx_1986 2008-12-08
  • 打赏
  • 举报
回复
string内部的不需要加 #include <algorithm>
这应该是c++primer上面的代码 可以通过编译
接引用(*iter)就是个string 对象了 string 对象调用方法有什么不对吗
hhyttppd 2008-12-08
  • 打赏
  • 举报
回复
你这代码能通过编译?

你的例子中 *ter就是 string的对象。
nullah 2008-12-08
  • 打赏
  • 举报
回复
是 但是要加头文件 #include <algorithm>

*iter得到iter指向数据的值
lc19890326 2008-12-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 topcs 的回复:]
这是c++primer 第三版中的一段代码,解引用得到的不是值吗?
++iter在不断的向前移动,是不是对解引用的结果没有影响呢?
是不是说迭代器解引用的结果只与其关联的容器对象有关,与其具体的位置无关呢?
再次请教,谢谢。
[/Quote]
1.解引用是值,是容器内部元素的值,这个地方容器是vector<string>,是一个vector容器,内部元素为string,所以*iter就是一个string类型的元素
2.++iter代表迭代器移动,每移动一次就指向了另外一个string,解引用当然就是不同的string啦
3.没懂你说的这句话的意思,迭代器是一个类,相当于指针,解引用就是指向的对象。

例子

#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> strvec;
strvec.push_back("hello ");
strvec.push_back("world!");
for(vector<string>::iterator iter=strvec.begin();iter!=strvec.end();++iter)
{
cout<<*iter<<endl;
}
return 0;
}
topcs 2008-12-08
  • 打赏
  • 举报
回复
这是c++primer 第三版中的一段代码,解引用得到的不是值吗?
++iter在不断的向前移动,是不是对解引用的结果没有影响呢?
是不是说迭代器解引用的结果只与其关联的容器对象有关,与其具体的位置无关呢?
再次请教,谢谢。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧