Подтвердить что ты не робот

С++ uint, unsigned int, int

Привет У меня есть программа, которая имеет много векторов и индексов элементов этих векторов, и мне было интересно:

  • существует ли разница между uint и unsigned int
  • который лучше использовать один из вышеуказанных типов или просто использовать int, поскольку я читаю, что некоторые люди говорят, что компилятор более эффективно обрабатывает значения int, но если бы я использовал int, мне нужно будет всегда проверять отрицательные idxs, которые это боль.
  • Считаете ли вы, что итераторы лучше? это более эффективно, чем обычное индексирование vectorx[idx]?

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

4b9b3361

Ответ 1

  • С++ не определяет такой тип, как uint. Это должен быть "ваш" тип, т.е. Тип, определенный в вашем коде или какой-либо третьей библиотеке. Можно предположить, что это то же самое, что и unsigned int. Может быть unsigned long int хотя или что-то еще. В любом случае, вы должны проверить это самостоятельно.

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

  • Итераторы делают реализацию более универсальной, т.е. вы можете использовать итератор последовательного доступа и, таким образом, сделать вашу реализацию применимой к любой последовательной структуре данных. Используя индекс, вы устанавливаете требование произвольного доступа к структуре данных, что является сильным требованием. Не рекомендуется вводить сильные требования, когда им не нужна настоящая потребность.

Ответ 2

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

Ответ 3

1) uint = unsigned int, на самом деле uint - это просто typedef для unsigned int (будет заменен на unsigned int во время компиляции).

2) Если вы хотите добавить в свой код некоторую "безопасность", идите с uint, вы наверняка избежите отрицательных значений.

3) Если вы последовательно запускаете вектор, идите с помощью итераторов, они оптимизированы для последовательного цикла (они являются своего рода указателями).

Ответ 4

Как заметил другой плакат, uint, вероятно, является typedef для unsigned int Если вы используете Visual Studio, вы можете быстро проверить этот факт, нажав F12, пока текстовый курсор находится в uint, чтобы увидеть его определение.