Если массив / контейнер, о котором вы говорите, является просто общим абстрактным независимым от приложения массивом, то наиболее подходящим типом будет size_t
. Конечно, вы можете предоставить typedef
имя для типа в вашем интерфейсе. Опять же, это уместно, только когда вы работаете с абстрактными массивами, как в универсальной библиотеке контейнеров или универсальной функции сортировки и т. Д.
Когда вы попадаете в область, специфичную для приложения, size_t
больше не подходит. В вашей конкретной области приложения этот индекс обычно имеет некоторую специфическую семантику приложения, не связанную непосредственно с массивами. Например, это может быть «идентификатор сотрудника», или «номер ячейки», или «индекс цвета», или что-то еще. В таких случаях обычно у вас уже есть предварительно выбранный целочисленный тип для представления соответствующего количества. (И выбор обычно не имеет ничего общего с массивами.) Это именно тот тип, который вы должны использовать в своем интерфейсе.
Что касается типа со знаком / без знака ... Я, например, твердо убежден, что количества без знака должны быть представлены типами без знака, то есть нормальный индекс массива должен быть без знака.