c++标准库

Laozql 2009-03-03 04:41:22
大家看看下面有什么不对,编译没什么错误,但是运行是输入数据后就会有个错误提示:
代码(编译器:vc2008)

#include<iostream>
#include<algorithm>
#include<vector>
#include<iterator>
#include<string>

using namespace std;

int main(void)
{
vector<string> vec1(3,"cat");
vector<string> vec2;
for(int n=0;n!=3;n++)
{
string temp;
cin>>temp;
vec2.push_back(temp);
}
if(find_first_of(vec1.begin(),vec1.end(),vec2.begin(),vec2.end())==vec2.end())
cout<<"不存在!"<<endl;
else
cout<<*find_first_of(vec1.begin(),vec1.end(),vec2.begin(),vec2.end())<<endl;
return 0;
}
...全文
156 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xtting_8984313 2009-03-03
  • 打赏
  • 举报
回复
嗯,翻译有时候也很乱,我看侯捷的stl,也感觉好多前后矛盾的地方,所以还是捎带看一下实现的好。
Laozql 2009-03-03
  • 打赏
  • 举报
回复
运行了一下,看来真的错了!
谢谢大家!
是C++ Primer 4th ,
书上的原话:(p678)
find_first_of(beg1,end1,beg2,end2);
返回第二个范围的任意元素在第一个范围第一次首次出现的迭代器......
还是我理解错误?
wind_breez 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hairetz 的回复:]
嗯,就是2楼贴得那点问题,现在可以了。
find_first_of返回的的是第一段范围里第一次出现2段里某个数据的迭代器。
[/Quote]

我也觉得问题是这个.
xuruichen 2009-03-03
  • 打赏
  • 举报
回复
template<class FwdIt1, class FwdIt2, class Pred>
FwdIt1 find_first_of(FwdIt1 first1, FwdIt1 last1,
FwdIt2 first2, FwdIt2 last2, Pred pr);//from MSN

实际上相当于VEC1.END()==VEC2.END()
Laozql 2009-03-03
  • 打赏
  • 举报
回复
不回还看不了贴,无语了
tangshuiling 2009-03-03
  • 打赏
  • 举报
回复

相当于做了这种事情:
if(vec1.end()==vec2.end())
honghaixiao 2009-03-03
  • 打赏
  • 举报
回复
if(find_first_of(vec1.begin(),vec1.end(),vec2.begin(),vec2.end())==vec1.end())
happy002 2009-03-03
  • 打赏
  • 举报
回复
刚改做c++,来学习学习
  • 打赏
  • 举报
回复
嗯,就是2楼贴得那点问题,现在可以了。
find_first_of返回的的是第一段范围里第一次出现2段里某个数据的迭代器。
xxweilw 2009-03-03
  • 打赏
  • 举报
回复
find_first_of(vec1.begin(),vec1.end(),vec2.begin(),vec2.end())==vec1.end())
太乙 2009-03-03
  • 打赏
  • 举报
回复
find_first_of(vec1.begin(),vec1.end(),vec2.begin(),vec2.end())==vec1.end())


find_first_of(vec1.begin(),vec1.end(),vec2.begin(),vec2.end())==vec1.end())
ysuliu 2009-03-03
  • 打赏
  • 举报
回复
什么提示?
加断点调一下就行了啊,挺简单的代码。。
  • 打赏
  • 举报
回复


#include<iostream>
#include<algorithm>
#include<vector>
#include<iterator>
#include<string>

using namespace std;

int main(void)
{
vector<string> vec1(3,"cat");
vector<string> vec2;
for(int n=0;n!=3;n++)
{
string temp;
cin>>temp;
vec2.push_back(temp);
}
if(find_first_of(vec1.begin(),vec1.end(),vec2.begin(),vec2.end())==vec1.end())//最后一个参数改了
cout<<"不存在!"<<endl;
else
cout<<*find_first_of(vec1.begin(),vec1.end(),vec2.begin(),vec2.end())<<endl;
return 0;
}


xianyuxiaoqiang 2009-03-03
  • 打赏
  • 举报
回复
cout<<*find_first_of(vec1.begin(),vec1.end(),vec2.begin(),vec2.end())<<endl;
去掉*试试?

65,211

社区成员

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

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