Полагаю, вам нужен произвольный доступ к населению и генам. Вы говорите, что важна производительность, которую я интерпретирую как скорость выполнения. Так что, вероятно, лучше всего использовать vector<>
для хромосом и vector<char>
для генов. Причина vector<char>
заключается в том, что bitset<>
и vector<bool>
оптимизированы для потребления памяти и поэтому работают медленно. vector<char>
даст вам более высокую скорость за счет памяти x8 (при условии, что char
= байт в вашей системе). Так что, если вы хотите скорость, используйте vector<char>
. Если потребление памяти имеет первостепенное значение, используйте vector<bool>
или bitset<>
. bitset<>
может показаться естественным выбором, однако, имейте в виду, что он основан на количестве битов, что означает, что a) количество генов должно быть фиксированным и известным во время компиляции (что, я думаю, является большое нет-нет) и б) если вы используете разные размеры, вы получите одну копию на bitset
размер каждого из используемых вами bitset
методов (хотя встраивание может свести на нет это), т. е. раздувание кода. В целом, я думаю, что vector<bool>
лучше для вас, если вы не хотите vector<char>
.
Если вас беспокоит эстетика vector<char>
, вы можете typedef char gene;
, а затем использовать vector<gene>
, что выглядит более естественно.
A string
похож на vector<char>
, но более громоздкий.