我正在学习使用find
方法,据我所知,它返回找到项目的迭代器,这是我的示例代码,我试图找到字符串“foo”
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<string> foo;
vector<string>::iterator v1;
vector<string>::iterator v2;
v1=foo.begin();
v2=foo.end();
foo.push_back("bar");
foo.push_back("foo");
std::vector<string>::const_iterator it = find(v1, v2, "foo");
cout<<*it;
}
当我尝试编译代码时,我收到以下错误
error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'const std::basic_string<_Elem,_Traits,_Ax>' (or there is no acceptable conversion)
我无法cout对指针的依赖,似乎我必须重载<<
运算符但是我必须重载<<
运算符才能使用字符串,因为我已经可以做了
string boo = "bar"
cout<<boo;
发生了什么,我该如何解决这个问题?
答案 0 :(得分:2)
我可以在GCC下编译它,但MSVC拒绝它。正如克里斯的评论所示,添加#include <string>
可以解决问题。
你的程序在运行时崩溃了。在您将值分配给向量之前,您已分配到v1
和v2
,因此it
的结果从不指向“foo”。将两个赋值移到两个push_back
语句下面可以解决问题。您仍然需要检查it
的返回结果,如下所示:
if (it != foo.end()) {
cout << *it << endl;
} else {
cout << "*** NOT FOUND" << endl;
}
答案 1 :(得分:0)
添加#include <string>
,您应该没问题。
另外,请确保使用C ++ 11进行编译(不是某些编译器的默认值)。
另外,为安全起见,请在{{1>}之后v1
和v2
push_back
。在矢量发生变化后,v1
和v2
可能指向过时的位置。