gpt4 book ai didi

c++ - 如何将元素定义为与随机访问迭代器指向的元素类型相同?

转载 作者:行者123 更新时间:2023-11-28 02:39:58 25 4
gpt4 key购买 nike

我想将 v 定义为与下面 RAIterator 指向的元素相同的类型。

template < class RAIterator , class Comparator >
void g_quick_sort_3w_opt (RAIterator beg, RAIterator end, Comparator& cmp)
{
if ((end-beg) < 2)
return;

RAIterator low = beg;
RAIterator hih = end;
RAIterator i = beg;

T v = *beg; //I want T to be the type of an element pointed at by RAIterator

while (!(i == hih))
{
if (cmp(*i , v)) Swap(*low++, *i++);
else if (*i == v) ++i;
else Swap(*i, *--hih);
}
g_quick_sort_3w_opt(beg, low, cmp);
g_quick_sort_3w_opt(hih, end, cmp);
}

Swap 是来自genalg.h 的

现在我的测试输入是一个整数列表,如果我使用 int 而不是 T,上面的方法有效。

最佳答案

看看std::iterator_traits ,尤其是 referencevalue_type 成员。

typename std::iterator_traits<RAIterator>::value_type v = ...;
typename std::iterator_traits<RAIterator>::reference v = ...;

当然,您可能只需要使用自动类型推导就可以得到很好的服务:

auto v = ...; // Beware of proxies

关于c++ - 如何将元素定义为与随机访问迭代器指向的元素类型相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26309341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com