C++ sort需要4个参数,却提供了三个,这到底是什么错误

weixin_44834813 2019-07-26 12:02:38




我这写的迭代器也没什么问题啊
我要实现自己的随机迭代器,
可是运行会报错,
调用形式
arrayList<string>::iterator beg, end;
beg = array3.begin();
end = array3.end();
std::sort(beg,end);

是我发的迭代器类缺了什么,还是什么其他的问题的,


...全文
1909 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdghchj 2019-07-30
  • 打赏
  • 举报
回复
报错已经很明显指出了,你只实现的是一个iterater和整数间的加减,并没有实现两个iterator之间的加减法。 随机访问就需要能够计算出两个地址间相差多少个元素。
weixin_44834813 2019-07-30
  • 打赏
  • 举报
回复
引用 25 楼 sdghchj 的回复:

difference_type operator-(const iterator<T> &iter2) const
{
return position - iter2.position;
}



可以了,就缺了两个const,报这种错误。。。。。
多谢
weixin_44834813 2019-07-30
  • 打赏
  • 举报
回复
引用 25 楼 sdghchj 的回复:

difference_type operator-(const iterator<T> &iter2) const
{
return position - iter2.position;
}



报一样的错
sdghchj 2019-07-30
  • 打赏
  • 举报
回复

difference_type operator-(const iterator<T> &iter2) const
{
      return position - iter2.position;
}

weixin_44834813 2019-07-30
  • 打赏
  • 举报
回复
引用 23 楼 sdghchj 的回复:
[quote=引用 22 楼 weixin_44834813 的回复:]
[quote=引用 20 楼 sdghchj 的回复:]
报错已经很明显指出了,你只实现的是一个iterater和整数间的加减,并没有实现两个iterator之间的加减法。
随机访问就需要能够计算出两个地址间相差多少个元素。


后面重载了两个迭代器之间的相减,还是一样的问题[/quote]

你是怎么定义的,上代码行么,贴图有什么用?[/quote]


template<typename T>
bool operator==(const iterator<T> &iter, const iterator<T> &iter2);
template<typename T>
bool operator!=(const iterator<T> &iter, const iterator<T> &iter2);
template<typename T>
bool operator>(const iterator<T> &iter, const iterator<T> &iter2);
template<typename T>
bool operator<(const iterator<T> &iter, const iterator<T> &iter2);
template<typename T>
bool operator>=(const iterator<T> &iter, const iterator<T> &iter2);
template<typename T>
bool operator<=(const iterator<T> &iter, const iterator<T> &iter2);
template<typename T>
iterator<T>& operator+(iterator<T> &iter, const int size);
template<typename T>
iterator<T>& operator-(iterator<T> &iter, const int size);



template<typename T>
class iterator
{
public:
using iterator_category = std::random_access_iterator_tag;
using value_type = T;
using difference_type = ptrdiff_t;
using pointer = T * ;
using reference = T & ;
using size_type = size_t;

iterator(T* thePosition = nullptr) :position(thePosition) {}

reference operator*();
pointer operator->();


reference operator[](int index);
const T &operator[](int index)const;
iterator &operator++();
iterator &operator--();
iterator operator++(int);
iterator operator--(int);
iterator& operator+=(int size);
iterator& operator-=(int size);

friend bool operator>(const iterator<T> &iter, const iterator<T> &iter2)
{
return iter.position > iter2.position;
}
friend bool operator< (const iterator<T> &iter, const iterator<T> &iter2)
{
return iter.position < iter2.position;
}
friend bool operator>=(const iterator<T> &iter, const iterator<T> &iter2)
{
return iter.position >= iter2.position;
}
friend bool operator<=(const iterator<T> &iter, const iterator<T> &iter2)
{
return iter.position <= iter2.position;
}
friend bool operator==(const iterator<T> &iter, const iterator<T> &iter2)
{
return iter.position == iter2.position;
}
friend bool operator!=(const iterator<T> &iter, const iterator<T> &iter2)
{
return !(iter == iter2);
}
friend iterator& operator+(iterator<T> &iter, const int size)
{
iterator it = iter;
it.position += size;
return it;
}
friend iterator& operator-(iterator<T> &iter, const int size)
{
iterator it = iter;
it.position -= size;
return it;
}
difference_type operator-(iterator<T> &iter2)
{
return position - iter2.position;
}

private:
pointer position;
};
sdghchj 2019-07-30
  • 打赏
  • 举报
回复
引用 22 楼 weixin_44834813 的回复:
[quote=引用 20 楼 sdghchj 的回复:] 报错已经很明显指出了,你只实现的是一个iterater和整数间的加减,并没有实现两个iterator之间的加减法。 随机访问就需要能够计算出两个地址间相差多少个元素。
后面重载了两个迭代器之间的相减,还是一样的问题[/quote] 你是怎么定义的,上代码行么,贴图有什么用?
weixin_44834813 2019-07-30
  • 打赏
  • 举报
回复
引用 20 楼 sdghchj 的回复:
报错已经很明显指出了,你只实现的是一个iterater和整数间的加减,并没有实现两个iterator之间的加减法。
随机访问就需要能够计算出两个地址间相差多少个元素。


后面重载了两个迭代器之间的相减,还是一样的问题
weixin_44834813 2019-07-30
  • 打赏
  • 举报
回复
引用 19 楼 南郁 的回复:
派生关系:

class arrayList : public linear<T> {};

不应该是下面这样写吗?:

template <typename T>
class arrayList : public linear<T> {};


你的编译器是什么版本的?


VS2017
南郁 2019-07-29
  • 打赏
  • 举报
回复
派生关系:

class arrayList : public linear<T> {};

不应该是下面这样写吗?:

template <typename T>
class arrayList : public linear<T> {};


你的编译器是什么版本的?
姚传明 2019-07-29
  • 打赏
  • 举报
回复
容器的使用请看专业函数介绍,不是每个函数都可以使用默认参数。
真相重于对错 2019-07-28
  • 打赏
  • 举报
回复
sort函数是针对内部存储连续容器, list容器内部是不连续的,你实现的不是随机访问器。对于list的 itertor 的+ 并不是直接把首地址+size就可以得到结果 具体你的代码由于是贴图,无法给出详细解答。
真相重于对错 2019-07-28
  • 打赏
  • 举报
回复
引用 16 楼 weixin_44834813 的回复:
[quote=引用 15 楼 真相重于对错 的回复:] sort函数是针对内部存储连续容器, list容器内部是不连续的,你实现的不是随机访问器。对于list的 itertor 的+ 并不是直接把首地址+size就可以得到结果 具体你的代码由于是贴图,无法给出详细解答。
又不是list链表 我这个是线性表怎么不是连续存储的?[/quote] 你又没把代码贴全,而且贴的是图,让人怎么猜? 大家都是神仙吗?
weixin_44834813 2019-07-28
  • 打赏
  • 举报
回复
引用 15 楼 真相重于对错 的回复:
sort函数是针对内部存储连续容器,
list容器内部是不连续的,你实现的不是随机访问器。对于list的 itertor 的+ 并不是直接把首地址+size就可以得到结果
具体你的代码由于是贴图,无法给出详细解答。

又不是list链表
我这个是线性表怎么不是连续存储的?
yshuise 2019-07-27
  • 打赏
  • 举报
回复
亲测:
list<int> sss;
std::sort(sss.begin(), sss.end());、
====================
调用成员函数sss.sort();
  • 打赏
  • 举报
回复
。。。。。 算是看明白了,不懂了。
  • 打赏
  • 举报
回复
你这样写代码试试能过不。 arrayList<string>::iterator beg, end; std::sort(array3.begin(), array3.end()); arrayList这个没用过,它的迭代器支持随机访问吗?
weixin_44834813 2019-07-26
  • 打赏
  • 举报
回复
weixin_44834813 2019-07-26
  • 打赏
  • 举报
回复
weixin_44834813 2019-07-26
  • 打赏
  • 举报
回复
哪个大佬看一下,彩笔实在不知道错在哪里
weixin_44834813 2019-07-26
  • 打赏
  • 举报
回复
引用 7 楼 gouyanfen 的回复:
[quote=引用 6 楼 weixin_44834813 的回复:]
[quote=引用 5 楼 yshuise 的回复:]
编译器说你少给了一个参数。


我调用形式何来三个参数
std::sort(beg,end);
第四个参数是什么[/quote]
排序总有个条件吧,是升序还是降序,还是按什么规则,你少的就是这个规则[/quote]

迭代器指向的类型有重载 <的是升序
加载更多回复(7)

65,170

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧