减去迭代器和整数
Subtraction of iterators and integers
我正在研究基本的排序算法,我在这里寻找Shell Sort:https://github.com/nicolausYes/iterator-template-sort-library/blob/master/src/ShellSort.h
以下是相关代码:
template< class RandomAccessIterator, class Compare >
static void sort( RandomAccessIterator first, RandomAccessIterator last, Compare comp )
{
auto size = last - first;
auto h = 1;
while( h < size / 3 ) h = 3 * h + 1;
while( h >= 1 )
{
for( auto i = first + h; i != last; i++ )
{
for( auto j = i; (j - first) >= h && comp(*j, *(j-h)); j -= h )
std::swap( *j, *(j-h) );
}
h /= 3;
}
}
当他声明大小时,它应该是一个整数值还是另一个迭代器?因为他稍后将其除以数字,如下所示:"size/3"但是当他调用 std::swap(*j, *(j - h));他正在交换 2 个迭代器的内部,因此 J-H 返回一个迭代器。如果"大小"是一个迭代器,那么它有什么作用?我的意思是,如果它只是将内部指针除以 3,那就没有意义了。
从一个迭代器中减去另一个迭代器应该得到一个整数。STL 的随机访问迭代器在减去时生成类型为 ptrdiff_t
的值。在实现迭代器时,最好使用此类型。但是,在实践中,如果您想使用,例如,int
,那通常也可以。
中减去整数会生成另一个迭代器。
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 如何在c++迭代器类型中包装std::chrono
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 对于set上的循环-获取next元素迭代器
- 为什么output_editor Concept不需要output_e迭代器标记
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 使用迭代器时如何访问对象在向量中的位置?
- 跟随整数索引列表的自定义类迭代器
- 我可以将迭代器递增一个整数吗?
- 迭代器和无符号整数的重载 + 运算符
- 元编程构造,它返回枚举的基础类型和迭代器的整数
- 将矢量迭代器与整数进行比较
- 减去迭代器和整数
- C :带有整数指数作为迭代器的圆形缓冲区
- C++整数类的范围 - 可供选择的迭代器类型
- C++从迭代器中获取整数形式的索引值
- 是否可以编写符合标准的随机访问(或至少前向)整数迭代器