繁体   English   中英

list.sort和std :: sort有什么区别?

[英]what's the difference between list.sort and std::sort?

我试图使用clang编译以下代码但得到以下错误。

我想知道为什么使用list类中的sort可以工作,但不是std::sort

#include <list>
#include <iostream>

int main(){
    std::string strings[] = {"hello", "nihao", "byebye", "yo"};
    std::list<std::string> cars(strings, strings+sizeof(strings) / sizeof(char **));

    // cars.sort(std::less<std::string>()); // compiles fine and produce a sorted list

    std::sort(cars.rbegin(), cars.rend(), std::less<std::string>() ); // this one won't compile

    for (std::list<std::string>::iterator it = cars.begin(); it != cars.end(); ++it)
        std::cout << *it << " - ";

    std::cout << std::endl;
    return 0;
}

/usr/include/c++/4.2.1/bits/stl_iterator.h:320:25:错误:二进制表达式的操作数无效('iterator_type'(又名'std :: _ List_iterator>')和'iterator_type'){return __y .base() - __ x.base(); }

std::sort需要随机访问迭代器, std::list不提供。 因此, std::liststd::forward_list实现了它们自己的成员函数,用于排序哪些函数与它们较弱的迭代器一起工作。 这些成员函数的复杂性保证比更有效的通用算法更复杂。 [哎呀:见评论。]

此外,成员函数可以通过简单地重新链接列表节点来利用列表数据结构的特殊性质,而标准算法必须执行类似swap (或某种效果)的操作,这需要对象构造,赋值和删除。

注意remove()是一个类似的情况:标准算法只是一些迭代器返回重新排列,而list成员函数一次执行查找和实际删除; 再次感谢能够利用列表内部结构的知识。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM