在模板类 (C++) 中使用排序
Using sort within template class (C++)
我想使用标准算法对我的列表进行排序 std::sort
.
这是我的尝试:
#include <list>
#include <algorithm>
template<typename T>
class MyList {
private:
std::list<T> myList;
public:
void add(T item) {
myList.push_back(item);
}
void mySort() {
std::sort(myList.begin(), myList.end());
}
};
编译错误:
c:mingwlibgccmingw324.8.1includec++bitsstl_algo.h:5475:22: note: candidates are:
In file included from c:mingwlibgccmingw324.8.1includec++bitsstl_algobase.h:67:0,
from c:mingwlibgccmingw324.8.1includec++bitschar_traits.h:39,
from c:mingwlibgccmingw324.8.1includec++ios:40,
from c:mingwlibgccmingw324.8.1includec++ostream:38,
from c:mingwlibgccmingw324.8.1includec++iostream:39,
from ..srcfirstone.cpp:1:
c:mingwlibgccmingw324.8.1includec++bitsstl_iterator.h:327:5: note: template<class _Iterator> typename std::reverse_iterator<_Iterator>::difference_type std::operator-(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&)
operator-(const reverse_iterator<_Iterator>& __x,
^
c:mingwlibgccmingw324.8.1includec++bitsstl_iterator.h:327:5: note: template argument deduction/substitution failed:
In file included from c:mingwlibgccmingw324.8.1includec++algorithm:62:0,
from ..srcmylist.h:5,
from ..srcfirstone.cpp:2:
c:mingwlibgccmingw324.8.1includec++bitsstl_algo.h:5475:22: note: 'std::_List_iterator<int>' is not derived from 'const std::reverse_iterator<_Iterator>'
std::__lg(__last - __first) * 2);
^
In file included from c:mingwlibgccmingw324.8.1includec++bitsstl_algobase.h:67:0,
from c:mingwlibgccmingw324.8.1includec++bitschar_traits.h:39,
from c:mingwlibgccmingw324.8.1includec++ios:40,
from c:mingwlibgccmingw324.8.1includec++ostream:38,
from c:mingwlibgccmingw324.8.1includec++iostream:39,
from ..srcfirstone.cpp:1:
c:mingwlibgccmingw324.8.1includec++bitsstl_iterator.h:384:5: note: template<class _IteratorL, class _IteratorR> typename std::reverse_iterator<_Iterator>::difference_type std::operator-(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_IteratorR>&)
operator-(const reverse_iterator<_IteratorL>& __x,
^
c:mingwlibgccmingw324.8.1includec++bitsstl_iterator.h:384:5: note: template argument deduction/substitution failed:
In file included from c:mingwlibgccmingw324.8.1includec++algorithm:62:0,
from ..srcmylist.h:5,
from ..srcfirstone.cpp:2:
c:mingwlibgccmingw324.8.1includec++bitsstl_algo.h:5475:22: note: 'std::_List_iterator<int>' is not derived from 'const std::reverse_iterator<_Iterator>'
std::__lg(__last - __first) * 2);
^
18:57:32 Build Finished (took 986ms)
我做错了什么?
您正在尝试对列表进行排序。列表不支持std::sort
工作所需的随机访问迭代器。(列表仅支持双向迭代器。
以我的拙见,这是来自"C++大神"的错误逻辑。
可以使用 list::sort
成员函数对列表进行排序。
标准算法std::sort
需要随机访问迭代器,std::list<>::iterators
是双向迭代器)
使用成员函数std::list<>::sort
对列表进行排序
你基本上有两个选择:要么切换到使用 std::list
的 sort()
成员函数:
myList.sort();
。或者切换到不同的容器类型,例如 vector
或 deque
,通过提供随机访问迭代器来支持std::sort
。
在几乎所有可能的情况下,后者都是正确的选择; std::list
(在我看来)几乎总是一个错误。
std::list
没有随机访问迭代器,这是std::sort
的要求。但您可以改用 std::list::sort
成员函数。
请注意,这首先假设您需要一个std::list
。根据我的经验,这在实际代码中很少出现。很可能一个std::vector
就足够了。
使用以下代码:
void mySort() { myList.sort(); //std::sort(myList.begin(), myList.end()); }
相关文章:
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- clang格式:禁用排序包含
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 试图在c++中对数字列表进行排序
- 如何在C++中对数组进行冒泡排序