如何在模板中使用std函数?

时间:2018-06-22 10:05:35

标签: c++ templates vector stl std

例如,如果我在模板类中有一个vector,那么该如何对其进行排序,或者如何对向量进行迭代?因为我这样尝试过:

#ifndef SAVEVIEW_H
#include <array>
#include <vector>

template<typename T>
class sorted_array_view {
public:
    sorted_array_view(T* array, size_t size) {
        append(array, size);
    }

    void append(T* array, size_t size) {
        for( int idx = 0; idx < size; ++idx)
        {
            std::cout << "value of array at " << idx <<": "<< array[idx] << std::endl;
            data.push_back(array[idx]);
        }
        sort(first(),last(), data);
    }

    T at(size_t index) const {
        return data[index];
    }

    size_t size() {
        return data.size();
    }

    const size_t size() const {
        return data.size();
    }

private:
    size_t first() {
        return data[0];
    }
    size_t last() {
        return data[data.size()-1];
    }
    void sort (sorted_array_view first, sorted_array_view last, std::vector<T>);
    std::vector<T> data;
};

#endif // SAVEVIEW_H

并用于: sort(first(),last(), data);向我返回了此错误:

error: no matching function for call to 'sorted_array_view<int>::sort(size_t, size_t, std::vector<int, std::allocator<int> >&)' 

有什么想法,建议吗?谢谢!

1 个答案:

答案 0 :(得分:4)

std::sort采用random access iterators(例如向量迭代器或指针)。您输入了数字(size_t)。

#include <algorithm>
#include <vector>

void sortIt(std::vector<int> &vector) {
    std::sort(vector.begin(), vector.end());
}

该类的sort方法的定义也不同于您称之为的方法。

您声明它按值取sorted_array_view作为前两个参数,然后将其传递给size_t,因为这是方法firstlast返回的内容。

void sort (sorted_array_view first, sorted_array_view last, std::vector<T>);

我的建议是删除sort方法,并将sort调用替换为对std :: sort的调用,如下所示:

std::sort(data.begin(), data.end()); // was sort(first(),last(), data);