如何在向量中搜索元素?

时间:2010-11-22 07:21:02

标签: c++ vector find

我有这样的代码......

std::vector<string>::iterator p;
p =  find(v.begin(),v.end(),"asdasda"); 
cout << *p << endl;

如果“asdasda”不是向量的一部分,p指向一些垃圾,cout给出一个seg错误。什么应该是if声明会使cout执行onlyif“asdasda”被发现? 以及“asdasda”在v中的位置...就像我们之前宣称v [3]为“asdasda”一样, 那我怎么知道v [3]是“asdasda”?

3 个答案:

答案 0 :(得分:12)

p未指向“垃圾”,当找不到内容时,它只会变为v.end()

if (p != v.end()) {
   std::cout << "v[" << (p - v.begin()) << "] = ";
   std::cout << *p << std::endl;
}

答案 1 :(得分:4)

如果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

答案 2 :(得分:1)

如果找不到您搜索的值,则返回结束迭代器。 您可以在显示行之前添加if (p != v.end())来避免错误。