- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很惊讶它如何在使用不支持 auto middle = first + (last - first)/2;
的 ForwardIterator 时计算 middle
。
最佳答案
当然,即使它不是随机迭代器,您也可以计算元素的数量。
如果是随机迭代器,只需要last - first
就可以在常数时间内得到,如果不是,至少可以first
一个一个地推进,直到last
,并以线性复杂度获取计数。
应该实现的是根据iterator标签进行调度,下面是std::advance
的实现图示例,展示了如何根据iterator的类型进行调度:
template <class InputIterator, class Distance>
inline void __advance(InputIterator& i, Distance n,
input_iterator_tag)
{
while (n--) ++i;
}
template <class ForwardIterator, class Distance>
inline void __advance(ForwardIterator& i, Distance n,
forward_iterator_tag)
{
advance(i, n, input_iterator_tag());
}
template <class BidiectionalIterator, class Distance>
inline void __advance(BidiectionalIterator& i, Distance n,
bidirectional_iterator_tag)
{
if (n >= 0)
while (n--) ++i;
else
while (n++) --i;
}
template <class RandomAccessIterator, class Distance>
inline void __advance(RandomAccessIterator& i, Distance n,
random_access_iterator_tag)
{
i += n;
}
template <class InputIterator, class Distance>
inline void advance(InputIterator& i, Distance n)
{
__advance(i, n, iterator_traits<InputIterator>::iterator_category());
}
关于c++ - 为什么 std::binary_search 使用 ForwardIterator 而不是 RandomIterator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32420505/
我有一个自定义类和 std::vector 填充了此类的对象。我想在此数组中执行 binary_search。 我像这样在我的类中重载了运算符: bool operator ==(const some
我想用指针实现binary_search #include #include using namespace std; int binary_p(int x[],int size,int targ
我希望这不是痛苦的显而易见。我收到此神秘错误: fold.cpp:92: error: expected primary-expression before ‘)’ token 它所指的行是: if
我有一个 vector v 类 X 的实例 class X { public: int attribute_1; ... operator==(const int i){return th
我被这个问题困住了,我正在处理位置 vector 。在一种情况下,该 vector 相对于偶“位置”的第一个分量排序,在另一种情况下相对于另一个分量排序,在这两种情况下,偶的另一个元素保持不变。所以例
这段代码有什么问题吗? bool Spellcheck::smart_comp(string value, string key){ return true; } void func(){
全部,我有这样的代码: bool ISearchable::PerformSearch(const vector &passList, const string &lname, const strin
我正在阅读有关 binary_search 的内容,然后我尝试使用谓词来实现它。这是我的代码(我还包括了我正在使用的排序谓词)。我知道小于是默认值。这是粗略的测试代码 class person { p
我目前正在考虑使用 std::binary_search()(来自库)来确定列表中是否存在某个实例。在我开始使用它之前,我想知道它是如何工作的。 我的理解是它使用比较(对于用户定义的结构/类,它需要访
我尝试制作一个程序,使用 std::binary_search 检查数字是否在向量中 我知道我可以使用 std::find , 但我听说 std::binary_search如果比 std::find
我有一个按其整数索引排序的类对象 vector 。但是对象的索引是由类的成员函数生成的 - 因此没有 int id 存储为成员变量。 class boundary { public:
我有一些数据存储在排序的 vector 中。该 vector 按某个键排序。我知道 STL 有一个算法来检查一个元素是否在这个排序列表中。这意味着我可以这样写: struct MyData { int
我在这里找到了很多关于该主题的答案,但我无法运行我的代码。 编辑:发布的示例现在可以在引入缺失的东西后使用。希望有人可以使用这个例子作为自己实验的基础。我还介绍了将此示例用作随机访问迭代器所缺少的东西
这个问题在这里已经有了答案: Where can I get a "useful" C++ binary search algorithm? (9 个回答) 关闭5年前。 我想在 binary-sea
binary_search() 函数定义在头文件中,用于查找指定区域内是否包含某个目标元素。 该函数有 2 种语法格式,分别为: //查找 [first, last) 区域内是否包含 val boo
thrust::binary_search 据我所知,除默认流外的所有段错误。我在文档中找不到任何描述这种限制的信息,所以我希望专家能启发我如何正确使用。 这是一个简单的例子。此测试代码创建一个未排序
在下面的程序中,binary_search 返回 Err(2) 而不是预期的 Ok(0)。这是错误吗? fn main() { let x = vec!["slot", "s"]; l
std::find_if 在其重载函数之一中采用谓词。绑定(bind)器使得为用户定义的类型编写 EqualityComparators 并将它们用于动态比较或静态比较成为可能。 相比之下,标准库的二
std::binary_search 击败了一个简单的自制二进制搜索算法(再次): // gcc version 4.8.2 X86_64 #ifndef EXAMPLE_COMPARE_VERSIO
在我检测到 std::upper_bound 之前,我实现了我自己的 binarySearch 版本来确定所需元素的索引。该实现有效,但与线性搜索相比,我的 binarySearch 只快了一点点。随
我是一名优秀的程序员,十分优秀!