Какая коллекция STL является предпочтительной, когда это все, что вам нужно? - PullRequest
2 голосов
/ 20 июля 2010

Мне просто нужна "сумка вещей".Это не должен быть набор, карта или даже какой-то определенный порядок.Мне просто нужно иметь возможность добавлять вещи и перебирать их, не более того.Я не ожидаю, что он будет очень большим, но он не получит действительно плохого качества, если это произойдет.

Какой контейнер следует использовать?

Ответы [ 5 ]

8 голосов
/ 20 июля 2010

Стандарт рекомендует использовать вектор в качестве контейнера по умолчанию.Но Херб Саттер на самом деле дает основания для использования deque в качестве первого выбора .

5 голосов
/ 20 июля 2010

vector вероятно имеет самые низкие издержки из всех контейнеров.Пока вы не добавляете и не удаляете вещи посередине.

5 голосов
/ 20 июля 2010

По умолчанию используйте вектор ... Но тогда, если это возможно, не забудьте использовать косвенное указание типа!

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

Например, допустим, вы изначально выберете вектор (который является выбором по умолчанию):

typedef std::vector<MyThing> MyThingContainer ;

А затем используйте контейнер как обычно:

void foo(MyThingContainer & things)
{
    for(MyThingContainer::iterator it = things.begin(),
        itEnd = things.end() ;
        it != itEnd ;
        ++it)
   {
      MyThing & thing = *it ;
      // Do something with that thing
   }
}

Таким образом, в день, когда вы найдете список, или деку, или любой другой контейнер, отличный от вектора, просто изменив typedef и перекомпилировав, вы измените истинный тип контейнера.

1 голос
/ 20 июля 2010

std::vector.Не требует operator<.

0 голосов
/ 20 июля 2010

std :: vector - хороший выбор по умолчанию. Это простая структура данных, реализованная в виде динамического массива. Элементы упакованы рядом друг с другом, что является хорошим местоположением ссылки (полезно для кэширования)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...