迭代器类别';:不是';标准::迭代器特性<_初始化>'; C++中的新手。我想创建一个动态对象数组,并使用std::sort()对它们进行排序。然而,出现了几个错误,我不知道为什么。谢谢你的帮助。 错误如下所示: >community\vc\tools\msvc\14.10.25017\include\xutility(988): >错误C2794:“迭代器_类别”:不是任何直接或间接类别的成员 >“std::iterator_traits”的间接基类 >与 > [ >_InIt=问题 >]\include\算法(2915): >注意:请参阅函数模板实例化“void”的参考 >std::_Debug_range(_InIt,_InIt,std:_Dbfile,std:_Dbline_t)' >正在编辑 >与 > [ >_RanIt=问题, >_InIt=问题 #包括“stdafx.h” #包括“stdlib.h” #包括 #包括 #包括 使用名称空间std; 阶级问题{ 公众: 字符串名; int t; int d; 问题(){} 问题(字符串名,int t,int d):名称(name),t(t),d(d){ ~Problem(){} bool算子>H; 而(H>=0){ cin>>N>>t0; //Problem ProblemSet=(Problem)malloc(N*sizeof(struct ProblemNode)); Problem*ProblemSet=新问题[N]; 对于(int i=0;i>问题集[i]。名称>>问题集[i]。t>>问题集[i]。d; FindOrder(H,N,t0,问题集); 删除[]问题集; cin>>H; } 返回0; } void FindOrder(int H,int N,int t0,问题集[]){ int-total=t0; 排序(ProblemSet[0],ProblemSet[N-1]); 对于(int i=0;i

迭代器类别';:不是';标准::迭代器特性<_初始化>'; C++中的新手。我想创建一个动态对象数组,并使用std::sort()对它们进行排序。然而,出现了几个错误,我不知道为什么。谢谢你的帮助。 错误如下所示: >community\vc\tools\msvc\14.10.25017\include\xutility(988): >错误C2794:“迭代器_类别”:不是任何直接或间接类别的成员 >“std::iterator_traits”的间接基类 >与 > [ >_InIt=问题 >]\include\算法(2915): >注意:请参阅函数模板实例化“void”的参考 >std::_Debug_range(_InIt,_InIt,std:_Dbfile,std:_Dbline_t)' >正在编辑 >与 > [ >_RanIt=问题, >_InIt=问题 #包括“stdafx.h” #包括“stdlib.h” #包括 #包括 #包括 使用名称空间std; 阶级问题{ 公众: 字符串名; int t; int d; 问题(){} 问题(字符串名,int t,int d):名称(name),t(t),d(d){ ~Problem(){} bool算子>H; 而(H>=0){ cin>>N>>t0; //Problem ProblemSet=(Problem)malloc(N*sizeof(struct ProblemNode)); Problem*ProblemSet=新问题[N]; 对于(int i=0;i>问题集[i]。名称>>问题集[i]。t>>问题集[i]。d; FindOrder(H,N,t0,问题集); 删除[]问题集; cin>>H; } 返回0; } void FindOrder(int H,int N,int t0,问题集[]){ int-total=t0; 排序(ProblemSet[0],ProblemSet[N-1]); 对于(int i=0;i,c++,C++,您可能还希望替换手动动态阵列管理: Problem* ProblemSet = new Problem[N]; .... delete[] ProblemSet; 使用std::vector std::vector<Problem> ProblemSet(N); std::向量问题集(N); 这样做甚至可以简化您的函数接口。要排序: void FindOrder(int H, int t0, std::vector<Problem>& ProblemSet

您可能还希望替换手动动态阵列管理:

Problem* ProblemSet = new Problem[N];
....
delete[] ProblemSet;
使用
std::vector

std::vector<Problem> ProblemSet(N);
std::向量问题集(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;
    }
}
void FindOrder(int H,int t0,std::vector&ProblemSet){
int-total=t0;
排序(ProblemSet.begin(),ProblemSet.end());
用于(自动&p:ProblemSet){

最后,您的错误消息是否应该告诉您是哪一行代码导致了这种混乱。那是哪一行?
sort(ProblemSet[0],ProblemSet[N-1]);
是错误的。索引到未知大小的数组不会产生迭代器。您可能的意思是
sort(ProblemSet,ProblemSet+N);
错误消息基本上是这样说的“
Product
不是迭代器”。您正在将两个
Product
s传递给
sort
。非常感谢!!这完全解决了我的问题,感谢您的建议简化了我的代码。这真的很有帮助。
sort(ProblemSet, ProblemSet + N);
Problem* ProblemSet = new Problem[N];
....
delete[] ProblemSet;
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;
    }
}