例如,如果我在模板类中有一个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> >&)'
有什么想法,建议吗?谢谢!
答案 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
,因为这是方法first
和last
返回的内容。
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);