std::sort не работает для std::list

285
19 декабря 2016, 20:12
#include <list>
#include <iostream> 
#include <algorithm>
#include <iterator>
using namespace std;
int main() {
    list<int> l;
    l.push_back(0);
    l.push_back(0);
    l.push_back(0);
    l.push_back(0);
    list<int>::iterator i;
    for (i = l.begin(); i != l.end(); i++)
        cout << *i << endl;
    cout << endl;
    i = l.begin();
    i++;
    i++;
    l.insert(i, 999);
    for (i = l.begin(); i != l.end(); i++)
        cout << *i << endl;
    cout << endl;
    i = l.end();
    --i;
    --i;
    l.insert(i, 200);
    for (i = l.begin(); i != l.end(); i++)
        cout << *i << endl;
    sort(l.begin(), l.end()); // ругается на код заголовка
    return 0;
}

error C2784: '_RanIt1::difference_type std::operator -(std::move_iterator<_RanIt> &,const std::move_iterator<_RanIt2> &)' : could not deduce template argument for 'std::move_iterator<_RanIt> &' from 'std::_List_iterator<_Mylist>'

Answer 1

std::sort требует итераторы с произвольным доступом (Random Access Iterator), а итераторы std::list - это двунаправленные итераторы (Bidirectional Iterator).

Об этом и говорит ошибка компилятора - у итераторов std::list нету operator- (вычитания).

Answer 2

все понял сам разобрался sort() для list работать не будет

READ ALSO
Простейший IMAP клиент на winsock C++

Простейший IMAP клиент на winsock C++

Добрый день, в общем нужно сделать простейший IMAP клиент на сокетах

422
Округление до N знаков после запятой в с++

Округление до N знаков после запятой в с++

есть число типа double, например 464452675

324
Выполнение Kernel CUDA длительное время на Win7

Выполнение Kernel CUDA длительное время на Win7

Пишу программу на CUDA для решения одной NP-полной задачиСобственно вопрос в чем - если программа выполняется менее чем за 2 сек все ок, если больше...

310
Работа функций пользователя

Работа функций пользователя

я написал функцию, которая создает двумерный динамический массив, а затем заполняет его нулямиНо при выводе его на экран там не нули

280