You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中对数组指针使用STL sort()函数?

解决STL sort()与动态数组指针的使用错误

错误原因

你遇到的expression must have class type but it has type "double *"错误,核心问题是testScore是double*类型的指针,并非std::vector这类容器类,因此没有begin()和end()成员方法。

解决方案

方案1:直接用指针作为迭代器调用sort

STL的sort函数支持随机访问迭代器,动态数组的首指针和尾后指针完全符合迭代器的要求。只需修改sort的参数,同时修正循环中的数组长度判断错误:

修改后的main函数代码:

int main(){
    getScores();
    sort(testScore, testScore + numberOfScores); // 用指针代替容器的begin/end
    cout << showpoint << fixed << setprecision(2);
    for (int i = 0; i < numberOfScores; i++){ // 用实际元素个数代替sizeof(testScore)
        cout << *(testScore + i) << endl;
    }
    delete[] testScore; // 必须释放动态分配的内存,避免泄漏
    return 0;
}

注意:sizeof(testScore)得到的是指针本身的字节数(如4或8字节),不是数组的元素个数,所以循环条件必须用numberOfScores。

方案2:改用std::vector(更推荐的C++写法)

既然已经包含了<vector>头文件,直接使用vector更安全——无需手动管理内存,且天然支持begin()/end():

  1. 修改全局变量定义:
// 替换原有的 double *testScore;
vector<double> testScore;
  1. 修改getScores函数,去掉动态分配内存的代码:
void getScores(){
    cout << "How many scores are you entering?\n"; 
    cin >> numberOfScores;
    while (numberOfScores <= 0){
        cout << "please enter a valid input \n";
        cin.clear();
        cin.ignore(1000,'\n');
        cin >> numberOfScores;
    }

    testScore.resize(numberOfScores); // 调整vector的大小以容纳指定数量的分数
    for (int i = 0; i < numberOfScores; i++){
        cout << "Please enter a score:\n";
        cin >> testScore[i];
        while (testScore[i] < 0 || testScore[i] > 100){
            cout << "please enter a valid input \n";
            cin.clear();
            cin.ignore(1000,'\n');
            cin >> testScore[i];
        }  
    }
}
  1. 修改后的main函数可以保留原有的sort调用,还能使用更简洁的范围for循环:
int main(){
    getScores();
    sort(testScore.begin(), testScore.end());
    cout << showpoint << fixed << setprecision(2);
    for (double score : testScore){
        cout << score << endl;
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Ivan Sepulveda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 02:06:33