对环形缓冲区 class 个对象进行排序

Sorting a ring buffer class objects

我正在尝试为环形缓冲区 class 对象创建排序函数,但它给了我以下错误并且我无法删除它:

template placeholder type 'ring' must be followed by a simple declarator-id

argument list for class template "ring" is missing

'arr' was not declared in this scope

(arr) 已在函数的参数中声明,但它无法识别它

希望有人能解释排序功能有什么问题,下面是我的代码:

#include<iostream>
#include<initializer_list>
template<typename T>
void swap(T& x, T& y) {
    T temp;
    temp = x;
    x = y;
    y = temp;
}

template<typename T>
class ring {

public:
    class iterator;

public:
    ring(std::initializer_list<T>elements) {
        sze = elements.size();
        value = new T[sze];
        for (auto& i : elements) {
            add(i);
        }
    }

    T& get(int x) { return value[x]; }

    std::size_t size() { return sze; }

    void add(T v) {
        value[index++] = v;
        if (index == sze)
            index = 0;
    }
    iterator begin() { return iterator(0, *this); }
    iterator end() { return iterator(sze, *this); }

    friend void BubbleSort(ring& arr, std::size_t n);

    ~ring() { delete[] value; }

private:
    int index = 0;
    std::size_t sze;
    T* value;
    };

template<typename T>
class ring<T>::iterator {
public:

    iterator(int x, ring& y) :index(x), obj(y) {}
    iterator& operator++() { index++; return *this; }
    iterator& operator++(int x) { index++; return *this; }
    bool operator!=(const iterator& other) { return index != other.index; }
    T& operator*() { return obj.get(index); }

private:
    int index;
    ring& obj;
};
template<typename T>
void BubbleSort(ring& arr, std::size_t n) { // here is the function of the sorting.
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr.value[j] > arr.value[j + 1]) {
                swap(arr.value[j], arr.value[j + 1]);
            }
        }
    }
}

您友好的编译器已经向您展示了问题所在以及发生在哪一行。

它给了你 3 条错误消息,告诉你到底是什么问题。

查看我的编译器输出

您的 class 戒指需要一个模板参数。与图片第49行一样

下面会编译。

#include<iostream>
#include<initializer_list>
template<typename T>
void swap(T& x, T& y) {
    T temp;
    temp = x;
    x = y;
    y = temp;
}

template<typename T>
class ring {

public:
    class iterator;

public:
    ring(std::initializer_list<T>elements) {
        sze = elements.size();
        value = new T[sze];
        for (auto& i : elements) {
            add(i);
        }
    }

    T& get(int x) { return value[x]; }

    std::size_t size() { return sze; }

    void add(T v) {
        value[index++] = v;
        if (index == sze)
            index = 0;
    }
    iterator begin() { return iterator(0, *this); }
    iterator end() { return iterator(sze, *this); }

    friend void BubbleSort(ring& arr, std::size_t n);

    ~ring() { delete[] value; }

private:
    int index = 0;
    std::size_t sze;
    T* value;
    };

template<typename T>
class ring<T>::iterator {
public:

    iterator(int x, ring& y) :index(x), obj(y) {}
    iterator& operator++() { index++; return *this; }
    iterator& operator++(int x) { index++; return *this; }
    bool operator!=(const iterator& other) { return index != other.index; }
    T& operator*() { return obj.get(index); }

private:
    int index;
    ring& obj;
};
template<typename T>
void BubbleSort(ring<T>& arr, std::size_t n) { // here is the function of the sorting.
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr.value[j] > arr.value[j + 1]) {
                swap(arr.value[j], arr.value[j + 1]);
            }
        }
    }
}

我没有检查功能。对环形缓冲区进行排序听起来有些奇怪。 . .