Есть несколько варианты со всеми их различными преимуществами и недостатками:
Используйте два std :: vector, один для другого для float и повторите их в отдельных циклах. Если тело цикла нетривиально, поместите его в шаблонную функцию, поэтому вам не нужно дублировать код.
Используйте std :: vector boost :: any, который может хранить как float, так и ints. Когда вы приобретаете значение, вам нужно «отличить» его до нужного типа. Опять же, вы можете включить любую логику в шаблонную функцию, чтобы избежать дублирования кода. Поскольку boost :: any cast to the actual type включает проверку типов, это решение не имеет оптимальной производительности. С другой стороны, он приближается к поведению языков, типизированных во время выполнения, таких как Python.
Особенно, если у вас есть более двух типов: используйте boost :: fusion :: map типа (float и int) для вектора типа.Вы можете выполнить итерацию карты с помощью boost :: fusion :: foreach, которая вызовет шаблонную функцию и передаст ей векторы. Таким образом, вы получаете по сути первое решение, но на этот раз оно масштабируется для многих типов данных.
Поскольку C++ статически типизирован, нет никакого способа иметь один контейнер, содержащий как float, так и ints без boost :: any. Исключение: если количество записей фиксировано во время компиляции, вам может помочь boost :: mpl :: vector.
Edit: Если вы хотите, примеры кода, дают использовать больше информации, которая, как вы хотите идти ...
вы можете использовать 'any' хранить их, но вы должны были бы иметь переменные маркера, чтобы знать, где начать читать Интс и где, чтобы начать читать поплавки, просто поместив их в двух массивах будет си mpler. –
Почему вы хотите повторить их в одном цикле? –
Я хочу повторить их в одном цикле, потому что это сделает мою оригинальную программу более кратким, поскольку она делает то же самое независимо от типа данных – pumpkinjuice