【发布时间】:2018-06-22 10:05:35
【问题描述】:
例如,如果我在模板类中有一个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> >&)'
任何想法,建议?谢谢!
【问题讨论】:
-
能否请您发布所有代码? sort 是类还是函数的方法?
-
std::sort(data.begin(), data.end());您在访问函数上调用了 sort 函数,而 sort 接受迭代器。您的功能也可以用data.first()和data.last()实现。如果这确实有效(很难说,因为那不是完整的代码),请联系我,我会将其变成正确的答案。 -
@kortealma 如果在每次插入范围后重新排序,为什么不直接使用
set或multiset?如果您想要的唯一操作是按顺序插入和迭代,那么它会更快,并且可以节省您编写整个类的时间。这看起来很像 XY 问题。您实际上想在这里完成什么? -
你的类(隐含地)声称是一个数组的view,而它实际上是一个copy。如果你的支持容器持有
std::reference_wrapper<T>s,那么它就是一个view,事实上,它只是一个(坏的)multi_set -
@Caleth 事实上,无论如何,在多集上制作这样的视图更容易 - Example。 (危险 - 仅用于说明。切勿使用!)
标签: c++ templates vector stl std