如何搜索矢量中的元素?
我有一个这样的代码....如何搜索矢量中的元素?
std::vector<string>::iterator p;
p = find(v.begin(),v.end(),"asdasda");
cout << *p << endl;
如果“asdasda”不是载体的一部分,p指向一些垃圾和cout给出赛格故障。如果if语句会使cout执行只发现“asdasda”,应该怎么办? 以及v中“asdasda”的位置..就像我们之前宣称v [3]为“asdasda”, 那么我怎么能从发现v [3]是“asdasda”?
p
不指向“垃圾”,只是在没有找到内容时变成v.end()
。
if (p != v.end()) {
std::cout << "v[" << (p - v.begin()) << "] = ";
std::cout << *p << std::endl;
}
如果std::find
没有找到任何东西,迭代器在这种情况下设置为v.end()
。
if (p != v.end())
{
// iterator is good
}
另请注意std::find
的一般情况。
下面是它的一个典型的定义:
namespace std {
template <class InputIterator, class T>
InputIterator find(InputIterator start,
InputIterator finish,
const T& value);
}
如果std::find
失败,它将返回finish
迭代,因为搜索是[start, finish)
包括start
但不包括finish
。
查找返回结束迭代器,如果它没有找到您搜索的值。 您可以通过在显示行之前加上if (p != v.end())
来避免您的错误。
如何在v中找到“asdasda”的位置..就像我们之前声明的v [ 3]作为“asdasda”,那么我怎么能从发现v [3]知道“asdasda”? – 2010-11-22 07:26:03
'p - v.start()',如果'p!= v.end()'。 – Flinsch 2010-11-22 07:29:31
如何在v中找到“asdasda”的位置..就像我们之前宣称v [3]为“asdasda”,那么我怎么能从发现v [3]是“asdasda”? – 2010-11-22 07:26:20
@Prasanth:查看我的代码的第二行。 – kennytm 2010-11-22 07:26:46
@ kenny:thanks ....它的v.begin()..:P – 2010-11-22 07:29:20