如何将元素定义为与随机访问迭代器指向的元素相同的类型
How can I define an element to be the same type as an element pointed at by a random access iterator?
我想将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
,尤其是reference
和value_type
成员。
typename std::iterator_traits<RAIterator>::value_type v = ...;
typename std::iterator_traits<RAIterator>::reference v = ...;
当然,你可能会很好地使用自动类型推导:
auto v = ...; // Beware of proxies
typename RAIterator::value_type v = *beg;
使用C++11,您可以使用auto
auto v = *beg;
相关文章:
- C++ 未初始化的本地(非全局)int 数组中的元素类型到底是什么?
- 如何将 n 个连续元素插入到元素类型不可复制的 std::vector 中?
- 元函数使用 decltype 返回元素类型
- STDLIB中容器元素类型有什么要求?
- 使用 dectlype 推断模板元素类型中的数据类型是否正确?
- boost multi_index - 如果元素类型仅支持移动语义,如何遍历它?
- 打印/修改类对象的特定成员变量,其类定义列表 (STL) 包含的元素类型
- 使用声明中的元素类型隐式初始化 std::array
- 使用 SFINAE 和 void_t 来确定容器内的元素类型
- 键入 trait 以获取 std::array 或 C 样式数组的元素类型
- 如何在QTScript中将QLIST内部的QMAP注册为元素类型
- 关联容器,比较函数不是元素类型的一部分吗?
- 特征稀疏矩阵的 CoeffRef 中的错误,元素类型为向量
- 在编译时间检查模板参数类型是否设置或多键,并且容器的元素类型是算术的
- 从函数模板参数中自动推论对容器的元素类型
- 直接获取基于范围的循环中的元素类型 **例如"using"
- 定义指向 C++ 中相同元素类型的元素
- 如何在C++中一一阅读 CIN?元素类型不同
- 如何从STL容器实例中获取元素类型
- 容器的const_cast元素类型