Как лучше всего хранить список небольших инструкций? - PullRequest
1 голос
/ 16 февраля 2012

Я хочу сделать небольшой искусственный симулятор жизни на C ++ или Vala. Я не могу решить, как написать генный класс. Ген состоит из набора инструкций, подобных ассемблеру, которые хранятся в очень маленьком классе, например:

rnd 0 10
add .0 20
mov .0 $accel

Во-первых, я должен использовать связанный список массивов (std :: list или std :: vector)?

Во-вторых, я должен инкапсулировать массив в класс или оставить его общедоступным? Если я выберу первое, мне придется обернуть многие функции из списка. Последний нарушает инкапсуляцию.

Ответы [ 3 ]

3 голосов
/ 16 февраля 2012
  1. Почти наверняка a vector;list даст вам только накладные расходы (с точки зрения используемой памяти и времени, потраченного на навигацию по списку), не предоставляя вам никаких преимуществ (я не думаю, что ваши гены должны иметь код, постоянно вставленный в середину, и даже еслиданные малы, но vector все еще выигрывает).

  2. Если клиенты класса должны почти свободно манипулировать списком инструкций, я все равно не вижу смысла в его инкапсуляции, а затем добавлении тоннмаленьких функций-обёрток.

1 голос
/ 26 февраля 2012

Я написал небольшую структуру генетического программирования на языке vala.Я только что использовал простые массивы структур (op, p1, p2) для представления инструкций.

1 голос
/ 16 февраля 2012

Если вы знаете точное количество или максимальное (которое не намного больше, чем ожидалось) количество элементов, тогда вам лучше всего использовать std::array<T> (тоже есть, если вы еще не знакомы с C ++ 11).

Число элементов не известно, затем используйте std::vector<T>.

Если число элементов может часто изменяться, тогда используйте std::deque<T>

, если вы хотите создать контейнер с наборами инструкций, тогда вам придется делать больше предсказаний.

у вас может получиться

std::deque<std::array<T, 4> > life_forms;

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

...