iterator_category':不是 'std::iterator_traits<_InIt>' 的任何基类的成员
iterator_category': is not a member of any base class of 'std::iterator_traits<_InIt>'
新手在C++。我想创建一个动态对象数组并使用 std::sort(( 对它们进行排序。但是,出现了几个错误,我不知道为什么。感谢您的任何帮助。错误如下所示:
> communityvctoolsmsvc14.10.25017includexutility(988): > error C2794: 'iterator_category': is not a member of any direct or > indirect base class of 'std::iterator_traits<_InIt>' > with > [ > _InIt=Problem > ] includealgorithm(2915): > note: see reference to function template instantiation 'void > std::_Debug_range<_RanIt>(_InIt,_InIt,std::_Dbfile_t,std::_Dbline_t)' > being compiled > with > [ > _RanIt=Problem, > _InIt=Problem
#include "stdafx.h"
#include "stdlib.h"
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
class Problem{
public:
string name;
int t;
int d;
Problem() {}
Problem(string name,int t,int d):name(name),t(t),d(d) {}
~Problem() {}
bool operator<(const Problem &right) const {
if (t == right.t) return d < right.d;
else return t < right.t;
}
};
void FindOrder(int H, int N, int t0, Problem ProblemSet[]);
bool compare(const Problem &left,const Problem &right) {
if (left.t == right.t) return left.d < right.d;
else return left.t < right.t;
}
int main()
{
int H, N, t0;
cin >> H;
while (H >= 0) {
cin >> N >> t0;
//Problem ProblemSet = (Problem)malloc(N * sizeof(struct ProblemNode));
Problem* ProblemSet = new Problem[N];
for (int i = 0;i<N;i++)
cin >> ProblemSet[i].name >> ProblemSet[i].t >> ProblemSet[i].d;
FindOrder(H, N, t0, ProblemSet);
delete[] ProblemSet;
cin >> H;
}
return 0;
}
void FindOrder(int H, int N, int t0, Problem ProblemSet[]) {
int total = t0;
sort(ProblemSet[0], ProblemSet[N-1]);
for (int i = 0;i < N;i++) {
cout << ProblemSet[i].name << ProblemSet[i].t << ProblemSet[i].d << endl;
}
}
void FindOrder(int H, int N, int t0, Problem ProblemSet[]) {
int total = t0;
sort(ProblemSet[0], ProblemSet[N-1]); //Wrong
for (int i = 0;i < N;i++) {
cout << ProblemSet[i].name << ProblemSet[i].t << ProblemSet[i].d << endl;
}
}
sort(ProblemSet[0], ProblemSet[N-1]);
是错误的。 索引到未知大小的数组 IS 不会生成迭代器(如 std::sort
的要求。你可能的意思是
sort(ProblemSet, ProblemSet + N);
您可能还希望替换手动动态阵列管理:
Problem* ProblemSet = new Problem[N];
....
delete[] ProblemSet;
带着std::vector
.
std::vector<Problem> ProblemSet(N);
这样做甚至可以简化您的功能接口。并排序:
void FindOrder(int H, int t0, std::vector<Problem>& ProblemSet) {
int total = t0;
sort(ProblemSet.begin(), ProblemSet.end());
for (auto& p : ProblemSet) {
cout << p.name << p.t << p.d << endl;
}
}
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何在不产生任何垃圾的情况下获得C中的像素
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- C++映射有2个键,这样任何1个键都可以用来获取值
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- RtlCaptureStackBackTrace未捕获任何帧
- 链表c++插入,所有情况都已检查,但没有任何工作
- C++模板函数,用于比较任何无符号整数和有符号整数
- Arduino millis() - millis() 怎么能等于 0 以外的任何东西?
- 尝试摆脱任何堆内存分配
- 是否有任何C++功能可以对地图进行排序?
- 打印时有二叉树问题.用户输入不打印任何内容
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 在C++行尾写一个分号或多个分号是否会改变任何内容
- C++类型特征,以查看是否可以<uint32_t>对类型"K"的任何变量调用"static_cast(k)"
- C++ 将 CIN 值存储到任何类型的数组中
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- GStreamer在开始任何播放之前进行搜索
- 是否有任何建议来统一函数类型限定符并简化可恶的函数类型?