使用迭代器位置的线性和二进制搜索
Posted
技术标签:
【中文标题】使用迭代器位置的线性和二进制搜索【英文标题】:Linear and Binary search using iterator position [closed] 【发布时间】:2016-02-05 00:06:11 【问题描述】:我正在编写两个函数,第一个函数进行线性搜索,如果它在向量中,则应该返回第一个找到的值的位置。第二种方法是使用 equal_range 完成的二进制搜索,它应该返回与线性搜索相同的内容。目前他们正在检查每个值是否匹配。任何帮助表示赞赏。
int linearSearch( const vector<int>& vec, int z)
vector<int>::iterator iter = find(vec.begin(), vec.end(), z);
if (iter != vec.end())
return (iter-vec.begin());
else
return -1;
int binarySearch( const vector<int>& vec, int z)
pair<vector<int>::const_iterator, vector<int>::const_iterator> bounds;
bounds = equal_range(vec.begin(),vec.end(), z);
if (bounds.first != vec.end())
return (bounds.first -vec.begin());
else
return -1;
【问题讨论】:
【参考方案1】:您的描述不清楚,但我会指出代码的一些问题。
在binarySearch()
搜索中,有
bounds = equal_range(vec.begin(),vec.end(), z);
if (bounds.first != v.end())
return (bounds.first -v.begin());
v
没有在任何地方声明。如果代码编译然后,大概,它被声明在你没有显示的代码的某个地方。但它可能与vec
没有关系。代码的行为(尤其是return
)将是未定义的。
函数之间的一个相当基本的区别是因为std::equal_range()
假定一个排序(或分区)范围,而std::find()
没有。
【讨论】:
抱歉应该是 vec.begin,我编辑了它 我需要这段代码来输出向量中找到的值的位置以上是关于使用迭代器位置的线性和二进制搜索的主要内容,如果未能解决你的问题,请参考以下文章