Почему для некоторых контейнеров STL (Stack, Queue, Priority Queue) нет поддерживаемых итераторов? - PullRequest
0 голосов
/ 28 мая 2020

Для всех типов итераторов, почему нет поддерживаемого шаблона для контейнеров stack, queue и priority_queue STL?

#include <iostream>
#include <stack>
#include <algorithm>

int main(){

    std::stack<int> values;
    std::stack<int> valuesCopy;

    values.push(98);
    values.push(11);
    values.push(14);
    values.push(17);
    values.push(20);

    std::for_each( /* How can i manage this in a alternative way */,
                      [&](int value) mutable throw() -> void{ /* Process */ ;} );

    std::copy(/* Same for this */,std::back_inserter(valuesCopy));

    return 0;
}

1 Ответ

6 голосов
/ 28 мая 2020

Три не являются классическими c контейнерами, а скорее адаптерами контейнера . Им не нужно поддерживать итерацию. Цитата из книги "Язык программирования C ++":

Контейнерные адаптеры предоставляют специализированный доступ к базовым контейнерам.

Это:

предназначены для использования только через их специализированные интерфейсы. В частности, адаптеры контейнера STL не предлагают прямой доступ к своему базовому контейнеру. Они не предлагают итераторы или индексы.

...