首页 > 解决方案 > 算法中的排序函数返回错误

问题描述

我是 C++ 新手。我正在尝试使用algorithm头文件和使用sort函数对数组进行排序。但我收到以下错误: error: member reference base type 'int *' is not a structure or union。是否有一些语法错误

我通过以下方式声明和初始化数组:


    for(int i = 0; i < n; i++) {
        cin >> ptr[i];
    }

这是排序功能: sort(ptr.begin(), ptr.end());

编辑:

#include <iostream>
#include <algorithm>
#include <array>

using namespace std;

int main() {
    int n;
    cin >> n;

    int* ptr = new int[n];

    for(int i = 0; i < n; i++) {
        cin >> ptr[i];
    }
    sort(ptr.begin(), ptr.end());

    for(int i = 0; i < n; i++) {
        cout << ptr[i];
    }
    return 0;
}

标签: c++sorting

解决方案


ptr.begin()并且ptr.end()不正确。

ptr是类型int*。指针没有成员函数。您可以改用以下内容。

sort(ptr, ptr+n);

假设n是 5.ptr指向 5 ints 数组的第一个元素。

ptr
|
v
+---+---+---+---+---+
|   |   |   |   |   |
+---+---+---+---+---+

当你使用

sort(ptr, ptr+n);

您要求该函数对从 开始ptr和结束的所有对象进行排序ptr+n

ptr                 ptr+n
|                   |
v                   v
+---+---+---+---+---+
|   |   |   |   |   |
+---+---+---+---+---+

请注意,该元素ptr[n]无效,sort不会尝试访问它。最多可以访问ptr[n-1]


推荐阅读