односвязный список в стандартной библиотеке C ++ или других широко используемых библиотеках? - PullRequest
1 голос
/ 10 мая 2010

Кажется, что в стандартной библиотеке C ++ есть только двусвязный список (но не односвязный список), верно? Существуют ли какие-либо широко используемые библиотеки C ++ с односвязным списком?

Ответы [ 3 ]

8 голосов
/ 10 мая 2010

Существует класс slist от Boost, представляющий собой реализацию односвязного списка.

3 голосов
/ 15 марта 2014

Только для справки ...

Время прошло, и C ++ 11 принес нам контейнер std :: forward_list , который реализован в виде односвязного списка и по существу не имеет никаких издержек по сравнению с его реализацией в C.

По сравнению с std::list этот контейнер обеспечивает более эффективное хранение, когда двунаправленная итерация не требуется.

Предупреждение: отсутствует push_back метод ( std :: forward_list и std :: forward_list :: push_back )

3 голосов
/ 10 мая 2010

Существует slist , который является расширением SGI (__gnu_cxx::slist)

#include <iostream>
#include <iterator>
#include <ext/slist>

int main(int argc, char** argv) {
  __gnu_cxx::slist<int> sl;
  sl.push_front(1);
  sl.push_front(2);
  sl.push_front(0);
  std::copy(sl.begin(), sl.end(),  // The output is 0 2 1
            std::ostream_iterator<int>(std::cout, " "));
  std::cout << std::endl;
  return 0;
}
...